【问题标题】:accept_nested_attributes_for :allow_destroy, :_destroy not workingaccept_nested_attributes_for :allow_destroy, :_destroy 不工作
【发布时间】:2023-03-18 17:30:01
【问题描述】:

我有一个 Rails 4.1 应用程序,它使用了一些著名的技术。

简单的形式,茧

我无法销毁嵌套属性的记录。根据一些冗长的研究,我相信我的代码是正确的,但是我可能遗漏了一些愚蠢的东西。

型号

has_many :staff_services_joins, :dependent => :destroy
has_many :services, :through => :staff_services_joins
accepts_nested_attributes_for :staff_services_joins, :allow_destroy => true

这有点不正统,但是我在连接模型上有两个不是外键的组件,需要设置。这就是为什么我接受连接模型而不是服务模型的嵌套属性。

控制器方法

def update
ap staff_params
# if @staff_member.update_with_account staff_params, params[:password]
if @staff_member.update_attributes staff_params
  flash[:notice] = 'Successfully updated staff member! :)'
  redirect_to vendor_store_staff_path current_store, @staff_member
else
  flash[:error] = 'Failed to update staff member :('
  render :edit
end end

强大的参数

params.require(:staff).permit(
    :user_id,
    :store_id,
    :avatar,
    :remote_avatar_url,
    :first_name,
    :last_name,
    :email,
    :active,
    :admin,
    :staff_services_joins_attributes => [
        :staff_id,
        :service_id,
        :price,
        :duration,
        :_destroy
    ]
)

示例更新参数哈希

{
"store_id" => "2",
"avatar" => "avatar.png",
"remote_avatar_url" => "",
"first_name" => "Joshua",
"last_name" => "Tyree",
"email" => "joshuat@createthebridge.com",
"active" => "0",
"admin" => "1",
"staff_services_joins_attributes" => {
    "0" => {
        "service_id" => "2",
        "price" => "50.00",
        "duration" => "30",
        "_destroy" => "1"
    }
}

}

根据 has,这个东西应该会破坏那个模型,但出于某种原因它肯定不是。非常感谢任何帮助。

【问题讨论】:

  • 好吧,只需在staff_services_joins_attributes: [.. 中添加:id 并尝试。
  • 有趣,确实解决了问题。刚刚我明白为什么,是因为 ActiveRecord 无法通过数组索引来辨别数据库中与哪些记录相关?

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord simple-form


【解决方案1】:

为了将accepts_nested_attributes_for强参数一起使用,您需要指定哪些嵌套属性应列入白名单。您做到了,但您错过了添加执行 删除 操作所需的 :id"_destroy" 键标记了要删除的记录,但要找到记录并在内部删除,它需要有:id 存在。

您可以阅读Removing Objects指南。

【讨论】:

    猜你喜欢
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多