Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails关联可以';t指定外键_Ruby On Rails_Ruby_Associations_Activemodel_Mass Assignment - Fatal编程技术网

Ruby on rails Rails关联可以';t指定外键

Ruby on rails Rails关联可以';t指定外键,ruby-on-rails,ruby,associations,activemodel,mass-assignment,Ruby On Rails,Ruby,Associations,Activemodel,Mass Assignment,也许我做错了,但我的问题是: @restaurant = current_user.restaurants.build(params[:restaurant]) 这将构建一个新的餐厅对象,其中用户id设置为当前用户.id。仅当您在餐厅模型中设置了attr\u accessible:user\u id时,此选项才有效。如果不是的话,你会得到一个 ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attr

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

@restaurant = current_user.restaurants.build(params[:restaurant])
这将构建一个新的餐厅对象,其中用户id设置为当前用户.id。仅当您在餐厅模型中设置了
attr\u accessible:user\u id
时,此选项才有效。如果不是的话,你会得到一个

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:
user_id
我想要的是通过
.build
定义
user\u id
,但同时我不想让
attr\u可访问:user\u id
,因为这样某人就可以将此记录的user\u id设置为其他用户的id,这将是不好的

我认为外键被排除在这个大规模分配安全性之外,如果您通过关联
.build
方法创建一个新对象,外键就会被强制执行

有什么建议吗?我不想回到过去

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

因为这样做违背了
.build

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

您确定您的参数中没有
id
吗?是的!参数哈希中没有id您在使用Rails 3.2.0.rc1吗?这是一个已知的bug(已解决)@Delba thx!是的,我是。应该先检查一下rails的问题。很抱歉folks@patrickdet啊啊!!我有点为自己感到羞耻,但是。。。我可以把这个写进一个答案里吗,这样你就可以接受了,哈哈?