Ruby on rails Rails:使用表单(集合选择)调用ShowAction

Ruby on rails Rails:使用表单(集合选择)调用ShowAction,ruby-on-rails,actionview,Ruby On Rails,Actionview,给出了一个名为“book”的模型,其属性为“name”和“id”。如何使用此集合选择调用某本书的显示操作?下面提到的一个代码返回以下错误消息: 找不到ID=Book\u ID的书 <% form_tag(book_path(:book_id)), :method => :get do %> <p> <%= label(:book, :id, 'Show Book:') %> <%= @books = Books.find(:all

给出了一个名为“book”的模型,其属性为“name”和“id”。如何使用此集合选择调用某本书的显示操作?下面提到的一个代码返回以下错误消息:

找不到ID=Book\u ID的书

<% form_tag(book_path(:book_id)), :method => :get  do %>
  <p>
  <%= label(:book, :id, 'Show Book:') %>
    <%= @books = Books.find(:all, :order => :name)
      collection_select(:book, :id, @books, :id, :name) 
  %> 
  </p>
  <p>
  <%= submit_tag 'Go' %>
  </p>
<% end %>
:get do%>

:姓名)
集合_选择(:book,:id,@books,:id,:name)
%> 


book\u路径
仅为表单标记本身生成一次。无论您的选择何时更改,它都不会更新

当您提交该表单时,它将请求以下URL:

/books/book_id?book[id]=5
由于您的
book\u路径
认为book\u id是您想要的id号,因此它会尝试查找。您可以通过以下方式更改控制器中的代码来执行所需操作:

@book = Book.find(params[:id])
致:


但是它有点难闻,所以请注意。

您可以创建一条不基于id的新路线,如

get 'books/show'    # put this above your "resources :books"
把你的表格改成

<% form_tag books_show_path, :method => :get %>
:获取%>

非常感谢卢克。有没有关于无臭解决方案的建议?我只需要一个下拉菜单来选择要显示的某本书…因为“难闻的解决方案”会破坏使用book_path(id)对show操作的默认调用,不是吗?您可以尝试从任一字段中选择id,如:@book=book.find(params[:book]。try(:[],:id)| params[:id]),这将起作用,但这种气味仍然存在,因为从技术上讲,你不应该使用像那样的宁静路线。平衡“完成”与“遵循约定”。
<% form_tag books_show_path, :method => :get %>