2016-10-01 5 views
1

私はnew_wordsコントローラを持っていますが、今では「検索」アクションが必要です。私のルートでは、このリンクにnew_words/search/"search_word_here"RESTFulパラメータ付きのRailsフォームタグ

をナビゲートするとき

は、私はRailsは、検索結果のリストを返すようにしたい、私はこれだ:

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 %> 

しかし、私はこのエラーを取得する:あなたがあなたのルートget 'search/:word'のキーワードとして:wordを持っているので、任意の助けてくれてありがとう:)

答えて

0

は、Railsがそのあなたの期待している

enter image description here

を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 %> 

そして、あなたのコントローラにあなたがを使用することができます検索語を取得する方法:

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

この状況では、完全な安らぎのルートはありませんか? – user3448806

+0

と簡単な方法は、ルートの接頭辞 'bin/rails routes'を表示します。 – MyruBapa

+1

そのようなフォームヘルパーを使用していません。キーワードをルートの一部として保持するには、JSを使用してフォームを正しいURLにプログラムで送信する必要があります。両方をサポートしたい場合は、2つの異なるエンドポイントを作成するか、URLの ':word'部分をオプションにし、空であればクエリparamを使用します。しかし、これらのオプションはすべて私の意見に複雑さを増しています。したがって、ユースケースによっては価値がないかもしれません。 –

関連する問題