0

属性「name」と「id」を持つ「book」という名前のモデルが与えられます。このコレクションの選択を使用して、特定の本のショーアクションを呼び出すにはどうすればよいですか? 以下に示す 1 つのコードは、次のエラー メッセージを返します。

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_pathbook_id が必要な ID 番号であると考えているため、それを調べようとします。コントローラーのコードを次のように変更することで、必要なことを行うことができます。

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

に:

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

ただ、かなり臭いので注意が必要です。

于 2009-03-18T10:40:30.197 に答える