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

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

这将构建一个新的餐厅对象,其中用户id设置为current_user.id。只有在餐厅模式中设置attr_accessible :user_id时,此选项才有效。如果你没有得到
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:
user_id

我想要的是通过user_id定义.build,但同时我不想要attr_accessible :user_id,因为这样就可能有人将此记录的用户id设置为其他用户的id,这将是不好的!!
我认为外键被排除在这个大规模分配安全之外,如果您通过association.build.create方法创建一个新对象,外键就会被强制执行。
有什么建议吗?我不想回到
@restaurant = current_user.restaurants.build(params[:restaurant])
@restaurant.user = current_user

因为这样做违背了.build

最佳答案

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

关于ruby-on-rails - Rails协会无法批量分配外键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8616796/

10-11 10:19