0

我正在尝试实现搜索功能,但无法弄清楚simple_form_for需要与路线匹配的内容:

resources :shows do
  member do
    get :search
  end

  resources :episodes
end

我尝试了几种不同的格式:

# views/shows/_search.html.erb

<%= simple_form_for :search, url: search_show_path(show), :method => :get do |f| %>
  <%= f.input :search %>

  <%= f.button :submit, "Search", class: "btn btn-default" %>
<% end %>

<%= simple_form_for search_show_path(show), :method => :get do |f| %>
  <%= f.input :search %>

  <%= f.button :submit, "Search", class: "btn btn-default" %>
<% end %>

<%= simple_form_for search_show_url(show), :method => :get do |f| %>
  <%= f.input :search %>

  <%= f.button :submit, "Search", class: "btn btn-default" %>
<% end %>

当我在控制器中放置一个字符串来代替params[:search]查询时,我将忽略该代码。我用<%= render 'search', show: @show %>in调用表格views/shows/show.html.erb

4

1 回答 1

1

由于您期望 中的对象params[:id],这意味着它是成员路由而不是集合路由。

将您的路线文件更改为:

resources :shows do
  member do
    get :search
  end

  resources :episodes
end

调试提示:在这种情况下,始终查看正在构建的 URL(例如http://localhost:3000/shows/search.6?utf8=%E2%9C%93&search%5Bsearch%5D=test&commit=Search)。 6 未正确传递 URL。因此,路径帮助程序存在问题。

于 2016-02-21T20:48:05.340 回答