带有RESTFul参数的Rails form_tag

时间:2016-10-01 13:47:32

标签: ruby-on-rails

我有一个new_words控制器,现在我想进行'搜索'操作。

我希望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

感谢您的帮助:)

1 个答案:

答案 0 :(得分: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