Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 接受\u嵌套的\u属性\u未删除rails 4_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 接受\u嵌套的\u属性\u未删除rails 4

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

我已经阅读和研究了大约三天了。 这是我最后的办法

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 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