我有一个(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| %>
有更好的方法吗?
由于 阿南德
答案 0 :(得分:1)
您应该使用hidden_field_tag
代替f.hidden_field
作为query_id
,而不是Book模型的属性。