9

假设使用带有 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_attributes 进行 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 而不指定所有属性。

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

干杯

4

1 回答 1

21

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

你会有类似的东西:

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

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

于 2013-07-10T02:35:42.440 回答