Rails: использование формы (выбор коллекции) для вызова show-action - PullRequest
0 голосов
/ 18 марта 2009

Дана модель с именем «book» с атрибутами «name» и «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 ]

1 голос
/ 18 марта 2009

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

Но от этого пахнет плохо, поэтому будьте осторожны.

0 голосов
/ 19 июня 2014

Вы можете создать новый маршрут, который не основан на идентификаторе, например

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

и измените свою форму на

<% form_tag books_show_path, :method => :get %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...