2015-01-12 3 views
0

У меня есть контроллер для ресурса, BuddiesController. Мои маршруты конфигурационный файл до сих пор не былоМаршрутизация и форма в Rails

resources :buddies 
match ':controller(/:action(/:id))', :via => [:get, :post] 

Я не понимал того, что «ресурсы: Buddies» линия делает, пока я не прочитал на только сейчас маршрутизации в Rails, потому что поведение было идентично тому, что Я ожидал до сих пор. Проблема заключалась в том, что я хотел добавить к контроллеру не CRUD-действие: «поиск». Каждый раз, когда я использовал link_to (: action => 'search'), я получал бы исключение, говорящее, что действие «показать» не может быть найдено, несмотря на то, что url был «localhost: 3000/buddies/search», как ожидалось. У меня есть несколько вопросов, возникающих в связи с этим:

Во-первых, форма я использовал в «новой» перестал работать:

%= form_for(@buddy, {:action => :create, :method => :post, :html => {:role => "form"}}) do |f| %> 

потому что buddies_path не может быть найден. Как я могу вручную добавить путь buddies_path к моим маршрутам?

Во-вторых, я пересмотрел форму использования:

<%= form_for(@buddy, :url => {:action => :create, :id => @buddy.id}, :html => {:role => "form", :id => @buddy.id}) do |f| %> 

, но это вызвало форму, чтобы дать мне пароль и подтверждение по электронной почте, не соответствующий ошибки, даже если они совпадают. Что тут происходит?

Наконец, что является лучшим способом добавить действие поиска к моему ресурсу?

ответ

0

# routes.rb

ресурсы: Собеседники коллекции сделать ПОЛУЧАЮТ: поиск конца конца

теперь, когда вы запускаете rake routes | grep 'buddies' вы получите на выходе что-то вроде этого:

enter image description here

Теперь вам нужно определить это действие поиска в контроллере ваших друзей. # buddies_controller.rb класс BuddiesController < ApplicationController Защиты поиска конца конца

Есть поиск формы в приложении/просмотрах/приятелях/search.html.erb

Теперь для того, чтобы открыть свой поиск формы/ударить поиск действие вам нужно использовать

<%= link_to 'Search XYZ', search_buddies_path %> 

против buddies#search вы можете увидеть search_buddies

0

В routes.rb:

resources :buddies do 
    collection do 
    post :search 
    end 
end 

Это может сделать ваши работы маршрутизации.

Смежные вопросы