【问题标题】:Deletion of nested attributes does not work删除嵌套属性不起作用
【发布时间】:2014-01-10 14:25:36
【问题描述】:

我似乎无法使用accepts_nested_attributes_for 命令删除项目,但我已根据this tutorial 和关联的git repo 完成此操作。我的模型是...

class Job < ActiveRecord::Base
    has_many :specialties, :inverse_of => :job
    accepts_nested_attributes_for :specialties, allow_destroy: true, :reject_if => :all_blank
end

class Specialty < ActiveRecord::Base
    belongs_to :job, :inverse_of => :specialties
end

在我的Job 表单中,我有...

<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove Specialty" %>

当我单击复选框删除一对specialties 时,没有任何反应。我检查了服务器输出并收到:

在 2013-07-16 16:15:16 -0400 为 127.0.0.1 开始 PATCH "/jobs/1"

JobsController 处理#update 为 HTML

参数:{"utf8"=>"✓", "authenticity_token"=>"8VxYXujcKXpLEm8+7B43SLU6X3fH00kIOmFK+nvaBKs=", "job"=>{"name"=>"Cook", "description"=>"制作食物。", "specialties_attributes"=>{"2"=>{"name"=>"", "description"=>"", "_destroy"=>"1", "id"=>"3 "}, "3"=>{"name"=>"", "description"=>"", "_destroy"=>"1", "id"=>"4"}}}, "commit"= >"更新作业", "id"=>"1"}

作业负载 (0.1ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."id" = ?限制 1 [["id", "1"]]

不允许的参数:_destroy

不允许的参数:_destroy

不允许的参数:_destroy

不允许的参数:_destroy

我错过了什么?我已经阅读了教程和 repo 很多次,但我看不到我离开的地方。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    那是因为strong_parameters。你现在必须permit 键。在你的行动中:

    params.permit(:_destroy)

    【讨论】:

    • 啊啊啊!!!我试过这个! ...但我是在Job 上做的,而不是Specialties。感谢您指出。
    • 简单的错误最难发现!
    • @Jeff 您将 params.permit(:_destroy) 放在哪里确切?我很困惑!
    • 在 job_controller.rb > def job_params params.require(:job).permit(:id, :description, :specialty_fields_attributes => [:id, :job_id, :avatar, :_destroy])结束
    【解决方案2】:

    我喜欢@Damien Roche 的回答,但这只是为了不让任何人感到困惑。关注这个

    In job_controller.rb
    
    private
     def job_params 
       params.require(:job).permit(:id, :description, :specialty_fields_attributes => [:id, :job_id, :avatar, :_destroy])
     end
    

    【讨论】:

    • 谢谢,我绝对没想过将:_destroy 放入我的子属性数组中!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2018-02-28
    • 2020-04-08
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多