2016-10-01 67 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的期待,你提供該值以構建網址:

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。如果你想同時支持,你可以創建兩個不同的端點,或者使URL的':word'部分可選,並使用查詢參數(如果它是空的)。但是,所有這些選項在我看來都增加了複雜性,所以根據您的使用情況可能不值得。 –