Rails 关联不能批量分配外键

Posted

技术标签:

【中文标题】Rails 关联不能批量分配外键【英文标题】:Rails associations can't mass-assign foreign key 【发布时间】:2012-01-26 20:34:27 【问题描述】:

也许我做错了,但这是我的问题:

@restaurant = current_user.restaurants.build(params[:restaurant])

这将构建一个新的餐厅对象,其中 user_id 设置为 current_user.id。这仅在您在餐厅模型中设置 attr_accessible :user_id 时有效。如果没有,你会得到一个

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:
user_id

我想要的是通过.build 定义user_id,但同时我不想要attr_accessible :user_id,因为这样有人可以将此记录的user_id 设置为其他用户的ID ,那会很糟糕!

我认为外键已排除在此批量分配安全性之外,并且如果您通过关联 .build.create 方法创建新对象,则会强制执行。

有什么建议吗?不想回去了

@restaurant = current_user.restaurants.build(params[:restaurant])
@restaurant.user = current_user

因为这样就违背了.build的目的

【问题讨论】:

你确定你的参数中没有id吗? 是的!参数哈希中没有 id 您使用的是 Rails 3.2.0.rc1 吗?这是一个已知的错误github.com/rails/rails/issues/4051(已解决) @Delba 谢谢!我是。应该先检查rails问题。对不起各位 @patrickdet 啊啊啊!我有点为自己感到羞耻,但是......我可以把它放在一个答案中,这样你就可以接受了,哈哈? 【参考方案1】:

您使用的是 Rails 3.2.0.rc1 吗?这是一个已知的错误 github.com/rails/rails/issues/4051(已解决)

【讨论】:

以上是关于Rails 关联不能批量分配外键的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3.2,批量分配,动态角色?

如何为具有范围批量分配的 Rails 3.1 应用程序播种

在 Rails 中使用 accept_nested_attributes_for + 批量分配保护

无法批量分配受保护的元素:crop_x、crop_y、crop_w、crop_h。设计和 jCrop。 Ruby on Rails [关闭]

什么是 Rails 3 中的质量分配

Rails 批量赋值定义和 attr_accessible 使用