给出了一个名为'book'的模型,其中包含属性'name'和'id'。如何使用此集合选择调用某本书的节目动作?下面提到的一个代码返回以下错误消息:
无法找到ID = book_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 %>
答案 0 :(得分:1)
book_path
仅为表单标记本身生成一次。只要您的选择发生变化,它就不会更新。
当您提交该表单时,它将请求以下URL:
/books/book_id?book[id]=5
由于您的book_path
认为book_id是您想要的ID号,因此它会尝试查找。您可以通过更改控制器中的代码来执行您想要的操作:
@book = Book.find(params[:id])
为:
@book = Book.find(params[:book][:id])
但它闻起来很糟糕,所以请注意。
答案 1 :(得分:0)
您可以创建一个不基于id的新路由,例如
get 'books/show' # put this above your "resources :books"
并将表单更改为
<% form_tag books_show_path, :method => :get %>