0

给出了一个名为“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 %>
4

2 回答 2

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])

但它闻起来有点难闻,所以要小心。

于 2009-03-18T10:40:30.197 回答
0

您可以创建不基于 id 的新路由,例如

get 'books/show'    # put this above your "resources :books"

并将您的表格更改为

<% form_tag books_show_path, :method => :get %>
于 2014-06-19T17:16:17.033 回答