2010-09-23 125 views
1

我有一个允许用户查询书籍的(rails 3)应用程序。我有三个型号:查询,因此,本书用的has_many:通过关系是双向的:
查询通过结果 有许多书籍和 本书通过结果form_for和rails中的关联

许多查询当我输入一个查询,然后单击OK,我获取表单以使用查询短语创建图书。我想要books_controller#create使用查询ID来创建一个结果book_id =书的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在参数而不是表单字段通过如下:

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

有没有更好的方式来做到这一点?

感谢 阿南德

回答

1

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