rails中的form_for和关联

时间:2010-09-23 23:10:16

标签: ruby-on-rails-3

我有一个(rails 3)应用程序,允许用户查询书籍。我有三个模型:查询,结果,带有has_many的书:通过两种方式的关系:
查询通过结果有很多书 和 本书通过结果有很多疑问

当我输入查询并单击“确定”时,我会收到一个表单,使用查询短语创建一本书。我希望books_controller#create使用查询id来创建一个结果,其中book_id = book的id和query_id =传入的查询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])

我的问题是:如何将查询ID传递给图书创建操作,以便我可以在那里构建结果记录?

更新:找到解决方案:我使用带有url的form_for来传递param而不是表单字段,如下所示:

<%= form_for(@book,:url => {:action => 'create',:query_id => @query.id}) do |f| %>

有更好的方法吗?

由于 阿南德

1 个答案:

答案 0 :(得分:1)

您应该使用hidden_field_tag代替f.hidden_field作为query_id,而不是Book模型的属性。