假设用户模型 使用带有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,而不指定所有属性。
我错过了什么吗?这是一个错误吗?
干杯
答案 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。