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

phr*_*ron 9 strong-parameters ruby-on-rails-4

假设用户模型使用带有strong_parameters的Rails4.

class User < ActiveRecord::Base
  has_secure_password

 accepts_nested_attributes_for :identity

//  rest of code omitted for brevity
end
Run Code Online (Sandbox Code Playgroud)

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

def user_params
    params.require(:user).permit(:email, identity_attributes: [])
end
Run Code Online (Sandbox Code Playgroud)

允许每个identity_attribute的mass_assignment,无论其名称或编号如何.但这是在"未经许可的参数:identity_attributes"中运行的

但是,如果我指定identity_attributes它是有效的

def user_params
    params.require(:user).permit(:email, identity_attributes: [:last_name, :first_name])
end
Run Code Online (Sandbox Code Playgroud)

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

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

干杯

d34*_*4n5 21

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

你会有类似的东西:

def user_params 
  params.require(:user).permit(:email, identity_attributes: [:id, :last_name, :first_name]) 
end
Run Code Online (Sandbox Code Playgroud)

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