Rails:使用表单(集合选择)来调用show-action

时间:2009-03-18 10:05:21

标签: ruby-on-rails actionview

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

2 个答案:

答案 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 %>