【发布时间】:2013-11-21 10:10:42
【问题描述】:
我已经阅读和研究了大约 3 天。 这是我最后的选择。
土地.rb:
has_many :uploads , :dependent => :destroy
accepts_nested_attributes_for :uploads, :allow_destroy => true,:reject_if => :all_blank
上传.rb
belongs_to :land
_land_form_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 %>
lands_controller.rb
def update
if @land.update_attributes(land_params)
flash[:success] = "Land updated"
redirect_to lands_path
else
flash[:alert] = @land.errors.full_messages.first
redirect_to edit_land_path
end
end
def land_params
params.require(:land).permit( uploads_attributes: [ :id, :filename ] )
end
当我向文本字段添加内容并对其进行更新时,所有更新都会正确进行。如果我单击复选框,它不会删除该字段。
有人可以解释一下吗?
我也试过awesome_nested_fields 除了删除实际记录之外,一切正常。
提前谢谢你。
编辑:解决方案:(我喜欢将解决方案放在问题中,以防有人想在移动设备上查看它,因为我讨厌我无法立即看到解决方案)
感谢@nTraum
def land_params
params.require(:land).permit( uploads_attributes: [ :id, :filename, :_destroy ] )
end
一切都将是花花公子:)
【问题讨论】:
-
我遇到了同样的问题,但在我的情况下,我省略了 :id 字段。然后,如果要删除嵌套模型,则需要允许嵌套模型的 :id 和 :_detroy 属性。
标签: ruby-on-rails ruby ruby-on-rails-4