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 中使用 accept_nested_attributes_for + 批量分配保护
无法批量分配受保护的元素:crop_x、crop_y、crop_w、crop_h。设计和 jCrop。 Ruby on Rails [关闭]