accepts_nested_attributes_for rails 4未删除

时间:2021-09-19 01:16:30

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调用的参数。