form_for и ассоциация в рельсах - PullRequest
       1

form_for и ассоциация в рельсах

1 голос
/ 24 сентября 2010

У меня есть приложение (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| %>

Есть ли лучший способ сделать это?

Спасибо, Ананд

1 Ответ

1 голос
/ 05 августа 2011

Вы должны использовать hidden_field_tag вместо f.hidden_field как query_id как атрибут атрибута модели Книги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...