【问题标题】:Strong parameters for nested attributes returns "unpermitted parameters" when empty array空数组时,嵌套属性的强参数返回“不允许的参数”
【发布时间】:2013-07-07 19:48:00
【问题描述】:

假设一个用户模型 使用带有 strong_parameters 的 Rails4。

class User < ActiveRecord::Base
  has_secure_password

 accepts_nested_attributes_for :identity

//  rest of code omitted for brevity
end

如果我参考指南,我应该能够做到

def user_params
    params.require(:user).permit(:email, identity_attributes: [])
end

允许对每个身份属性进行质量分配,无论其名称或编号如何。但这运行在“Unpermitted parameters: identity_attributes”

但如果我指定了 identity_attributes 就可以了

def user_params
    params.require(:user).permit(:email, identity_attributes: [:last_name, :first_name])
end

我在 Identity 中有很多属性,我可以通过 User 对它们进行批量分配,而无需指定所有属性。

我错过了什么吗?这是一个错误吗?

干杯

【问题讨论】:

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


    【解决方案1】:

    您必须指定要更新的身份属性,包括身份实体的 :id。

    你会有类似的东西:

    def user_params 
      params.require(:user).permit(:email, identity_attributes: [:id, :last_name, :first_name]) 
    end
    

    如果你没有指定 :id,Rails 会尝试创建一个实体而不是更新它。我整个周末都在使用 Accepts_nested_attributes_for 处理简单的一对多关系,因为我没有在允许的属性中指定 id。

    【讨论】:

    • 谢谢,当你有一个一对多的关系时它是正确的(并且指定应该更新'多部分'中的哪个对象似乎是合乎逻辑的)但它似乎不是这样的1 对 1 关系(无需指定 identity.id 即可正常工作)。问题是关于文档中提供的示例,其中嵌套属性是一个空数组^_^(据我所知,这是行不通的)
    • OOps 今天早上重试,即使是一对一的关系,你也是对的......如果没有提供嵌套对象 ID,它似乎会删除原始记录并重新创建一个新记录,而不是更新现有的(!!)。当 strong_parameters 和 nested_attributes 时,文档不是很清楚! Ĥave swing欢呼
    • @d34n5 你太棒了:)。但我想知道为什么 mongoid 在他们的文档中遗漏了这个重要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2013-04-01
    • 2017-06-03
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多