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| %>
有没有更好的方式来做到这一点?
感谢 阿南德