У меня есть приложение (rails 3), которое позволяет пользователям запрашивать книги.У меня есть три модели: запрос, результат, книга с отношением has_many: through в обе стороны:
запрос имеет много книг по результату, а книга имеет много запросов по результатам
Когда я ввожу запрос и нажимаю OK,Я получаю форму для создания книги, используя фразу запроса.Я хочу, чтобы books_controller # create использовал идентификатор запроса для создания результата с book_id = идентификатором книги и query_id = переданным идентификатором запроса.Форма выглядит следующим образом:
<%= form_for(@book) do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class='field'>
<%= f.hidden_field :query_id, :value => @query_id%>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
И в контроллере книг у меня есть:
def create
@book = Book.new(params[:book])
query = Query.find(params[:query_id])
if(@book && query)
result = Result.new
result.book = @book
result.query = query
result.save!
...
end
end
При отправке этой формы я получаю ошибку:
ActiveRecord::UnknownAttributeError in BooksController#create
unknown attribute: query_id
(on line @book = Book.new(params[:book])
Мой вопрос: как пройти через идентификатор запроса к действию создания книги, чтобы я мог создать запись результата там?
Обновление: найдено решение: я использовал form_for с URL для передачи вПараметр вместо поля формы выглядит следующим образом:
<%= form_for(@book,:url => {:action => 'create',:query_id => @query.id}) do |f| %>
Есть ли лучший способ сделать это?
Спасибо, Ананд