当空数组时,嵌套属性的强参数返回“未允许的参数”

时间:2013-07-07 19:48:01

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

假设用户模型 使用带有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

允许每个identity_attribute的mass_assignment,无论其名称或编号如何。但这是在“未经许可的参数:identity_attributes”

中运行的

但是如果我指定了identity_attributes就行了

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

我在Identity中有很多属性,我可以通过User对它们进行mass_assign,而不指定所有属性。

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

干杯

1 个答案:

答案 0 :(得分:21)

您必须指定要更新的标识属性,包括:标识实体的标识。

你会有类似的东西:

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

如果你没有指定:id,Rails将尝试创建一个实体而不是更新它。我使用accepts_nested_attributes_for花了整个周末在一个简单的一对多关系上挣扎,因为我没有在允许的属性中指定id。