I have been reading and researching for about 3 days now. This is my last resort.
我现在已经阅读和研究了大约3天。这是我的最后一招。
land.rb:
land.rb:
has_many :uploads , :dependent => :destroy
accepts_nested_attributes_for :uploads, :allow_destroy => true,:reject_if => :all_blank
upload.rb
upload.rb
belongs_to :land
_land_form_partial.html.erb
_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
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
When I add something to the text field and update it, all updates properly. If I click on the check-box it won't remove the field.
当我向文本字段添加内容并更新它时,所有更新都正确。如果我单击复选框,它将不会删除该字段。
Can someone please shed a light on this?
有人可以为此阐明一下吗?
Also I tried awesome_nested_fields still everything works except for removing the actual record.
此外,我尝试了awesome_nested_fields仍然一切正常,除了删除实际记录。
thank you in advance.
先谢谢你。
EDIT: Solution: (I like to put the solution in the question in case someone wants to view it on mobile as I hate when I can't see the solution straight away)
编辑:解决方案:(我喜欢把解决方案放在问题中以防万一有人想在移动设备上查看它,因为我讨厌当我无法立即看到解决方案时)
Thanks to @nTraum
感谢@nTraum
def land_params
params.require(:land).permit( uploads_attributes: [ :id, :filename, :_destroy ] )
end
And all will be dandy :)
一切都会花花公子:)
2 个解决方案
#1
46
You need to allow the :_destroy
parameter for your nested model as well, as this gets used when you check the 'Delete' checkbox in the form. It's Rails' way of flagging model instances that have to be destroyed.
您还需要为嵌套模型允许:_destroy参数,因为当您选中表单中的“删除”复选框时会使用此参数。这是Rails标记必须销毁的模型实例的方式。
def land_params
params.require(:land).permit(uploads_attributes: [:id, :filename, :_destroy])
end
#2
7
The OP didn't have the same problem as me, but for anyone coming across this question, for me, it was the absence of allow_destroy: true
as an argument on the accepts_nested_attributes
call in the model.
OP与我没有相同的问题,但对于遇到这个问题的人来说,对我来说,缺少allow_destroy:true作为模型中的accepts_nested_attributes调用的参数。
#1
46
You need to allow the :_destroy
parameter for your nested model as well, as this gets used when you check the 'Delete' checkbox in the form. It's Rails' way of flagging model instances that have to be destroyed.
您还需要为嵌套模型允许:_destroy参数,因为当您选中表单中的“删除”复选框时会使用此参数。这是Rails标记必须销毁的模型实例的方式。
def land_params
params.require(:land).permit(uploads_attributes: [:id, :filename, :_destroy])
end
#2
7
The OP didn't have the same problem as me, but for anyone coming across this question, for me, it was the absence of allow_destroy: true
as an argument on the accepts_nested_attributes
call in the model.
OP与我没有相同的问题,但对于遇到这个问题的人来说,对我来说,缺少allow_destroy:true作为模型中的accepts_nested_attributes调用的参数。