Ruby on rails 接受\u嵌套的\u属性\u未删除rails 4
我已经阅读和研究了大约三天了。 这是我最后的办法 land.rb:Ruby on rails 接受\u嵌套的\u属性\u未删除rails 4,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我已经阅读和研究了大约三天了。 这是我最后的办法 land.rb: has_many :uploads , :dependent => :destroy accepts_nested_attributes_for :uploads, :allow_destroy => true,:reject_if => :all_blank upload.rb belongs_to :land _land\u form\u partial.html.erb <%= form_for
has_many :uploads , :dependent => :destroy
accepts_nested_attributes_for :uploads, :allow_destroy => true,:reject_if => :all_blank
upload.rb
belongs_to :land
_land\u form\u partial.html.erb
<%= form_for land , :html => {:multipart => true} do |f| %>
<%= f.fields_for :uploads do |builder| %>
<div class="land_fields">
<%= builder.label :filename, "Image" %>
<%= builder.text_field :filename %> <br/>
Delete: <%= builder.check_box :_destroy %>
</div>
<% end %>
#... buttons and other fields
<% end %>
当我向文本字段添加内容并进行更新时,所有内容都会正确更新。如果单击该复选框,则不会删除该字段
有人能解释一下吗
此外,我还尝试了除删除实际记录以外的所有方法
先谢谢你
编辑:解决方案:(我喜欢把解决方案放在问题中,以防有人想在手机上查看它,因为我讨厌当我不能马上看到解决方案时)
感谢@nTraum
def land_params
params.require(:land).permit( uploads_attributes: [ :id, :filename, :_destroy ] )
end
所有这些都很好:)您还需要允许嵌套模型使用
:\u destroy
参数,因为选中表单中的“Delete”复选框时会用到这个参数。这是Rails标记必须销毁的模型实例的方式
def land_params
params.require(:land).permit(uploads_attributes: [:id, :filename, :_destroy])
end
OP没有和我一样的问题,但对于任何遇到这个问题的人来说,对我来说,这是因为在模型中,
接受嵌套属性调用时没有允许销毁:true
作为参数。我想如果我说我爱你,那就太俗气了。真是该死。再次感谢:)。请注意:id和:_destroy参数都是必需的,我发现在只添加了:destoryI之后,我也遇到了同样的问题,但在我的例子中,我忽略了:id字段。然后,如果要删除嵌套模型,则需要允许嵌套模型的:id和:\ detroy属性。这应该在文档中突出显示
def land_params
params.require(:land).permit(uploads_attributes: [:id, :filename, :_destroy])
end