假设我有一个架构,其中苹果箱包含零个或多个苹果。在表单中编辑苹果箱时,我想列出苹果并在每个苹果旁边提供一个复选框,以便在提交表单时将其删除。
我看不到任何问题。在我的模型中我说
class AppleCrate < ActiveRecord::Base
has_many :apples
accepts_nested_attributes_for :apples, :allow_destroy => true
...
end
据我所知,我的表格正常。复选框以html格式显示,当控制器处理表单时,列表中的每个苹果都有一个名为“_destroy”的属性,根据我之前是否选中了复选框,该属性设置为“1”或“0”提交。
根据Rails API,当我将_destroy设置为1并保存时,应该删除苹果。但是当我提交表格时,我得到了
AppleCrateController中的ActiveRecord :: UnknownAttributeError#update
未知属性:_destroy
...
“apple_crate”=&gt; {“id”=&gt;“10101”,“apples”=&gt; {“1”=&gt; {“id”=&gt;“1”, “品种”=&gt;“格兰尼史密斯”, “apple_crate_id”=&gt; “中10101”, “_destroy”=&gt; “中1”}, “2”=&GT; { “ID”=&gt; “中2”, “品种”=&gt; “中富士”, “apple_crate_id”=&gt; “中10101”, “_destroy”=&gt; “中1”}, “3”=&GT; { “ID”=&gt; “中3”, “品种”=&gt; “中的Macintosh”, “apple_crate_id”=&gt; “中10101”, “_destroy”=&gt; “中0”}, ...
等等。
我必须错过一些明显的东西,但经过几天的充实,我无法理解。我可以成功地完成其他任务 - 更新,编辑,索引等 - 只要我省略:_destroy属性。有什么想法吗?
(对于它的价值,我在Windows上运行rails 3.2.2。)
更新:
This正是我在文档中看到的。 (参见“一对多”小节。)
更新:
根据评论中的要求,以下是观点:
<%= form_for @apple_crate do |f| %>
<% @apples = @apple_crate.apples %>
<% @apples.each do |apple| %>
<%= fields_for "apples[]", apple do |apple_fields| %>
<%= apple_fields.text_field :variety %>
<%= apple_fields.hidden_field :apple_crate_id %>
<%= apple_fields.hidden_field :id %>
<%= apple_fields.check_box :_destroy %>
<% end %>
<% end %>
<%= f.submit "Save" %>
<% end %>
答案 0 :(得分:1)
您应该使用rails帮助程序生成嵌套表单和表单,不要用手执行。所以我认为这就是你的错误所在。
尝试:
<%= form_for @apple_crate do |f| %>
<%= f.fields_for :apples do |apple_fields| %>
<%= apple_fields.text_field :variety %>
<%= apple_fields.hidden_field :apple_crate_id %>
<%= apple_fields.hidden_field :id %>
<%= apple_fields.check_box :_destroy %>
<% end %>
<% end %>
这样的事情,没有检查它是否正确,但想法应该足够清楚