2016-10-01 2 views
1

У меня есть контроллер new_words, и теперь я хочу иметь действие «поиска».Rails form_tag с параметрами RESTFul

Я хочу Rails вернуть список результатов поиска при навигации по этой ссылке new_words/search/"search_word_here"

В моих маршрутах, я получил это:

resources :new_words do 
     collection do   
      get 'search/:word', action: :search, as: 'search' 
     end 
    end 

И в виде у меня есть форма с get методом.

<%= form_tag search_new_words_path, method: :get, remote: true do %> 
    <%= text_field_tag :word %> 
    <%= submit_tag 'Search' %> 
<% end %> 

Но я только получаю эту ошибку:

enter image description here

Спасибо за любую помощь :)

ответ

0

Поскольку у вас есть :word в качестве ключевого слова в вашем маршруте get 'search/:word', Rails ожидает, что вы укажите это значение для создания URL-адреса:

search_new_words_path("test") 
#=> "/new_words/search/test" 

В вашем вопросе однако, вы ожидали, что форма будет поставлять :word, что означает, что вы должны использовать параметр формы, вместо ключевого слова в маршруте:

маршруты:

resources :new_words do 
    collection do   
     get 'search', action: :search, as: 'search' 
    end 
end 

вид:

<%= form_tag search_new_words_path, method: :get, remote: true do %> 
    <%= text_field_tag :word %> 
    <%= submit_tag 'Search' %> 
<% end %> 

И тогда в вашем контроллере вы можете использовать params метод поиска искомого слова:

def search 
    params[:word] # will return the search word 
end 
+0

Итак, разве у меня нет полного спокойного маршрута в этой ситуации, не так ли? – user3448806

+0

и простой способ префикс маршрута для показа 'bin/rails routes' – MyruBapa

+1

Пока не используется вспомогательный элемент формы. Вам нужно будет использовать JS для программной отправки формы на правильный URL-адрес, если вы хотите сохранить ключевое слово как часть маршрута. Если вы хотите поддерживать оба варианта, вы можете создать две разные конечные точки или сделать необязательную часть ': word' URL-адреса и использовать параметр запроса, если он пуст. Но все эти варианты сложны, на мой взгляд, так что, возможно, не стоит того, что зависит от вашего варианта использования. –

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