2014-09-25 22 views
0

不能在任何地方找到接受的方式而不需要通过控制器考虑到attr_accissible不再支持创建模型的模型。如何创建无控制器考虑rails4强参数

是下面的方法正确吗?

在我的旧代码

ModelName.create(course_id:680, user_id:25) 

新的代码(现在我已经删除attr_accessible引发mass_assignment错误):

model = ModelName.new.tap do |m| 
    m.course_id = 680 
    m.user_id = 25 
end 
model.save! 

(的作品,但看起来哈克)

Apparently,下面会不会因为without_protec工作重刑选项在Rails4去除

ModelName.create({course_id: 680, user_id: User.first.id}, without_protection: true) 

感谢this question我读过有关强参数的控制器之外使用“ - link但即便我的从我的控制台以下:

raw_params = {course_id: Course.last.id, user_id: User.first.id} 
parameters = ActionController::Parameters.new(raw_params) 
ModelName.create(parameters.permit(:course_id, :user_id)) 

我得到错误

WARN -- : WARNING: Can't mass-assign protected attributes for ModelName: course_id, user_id 
+0

如果您的模型的属性的大规模分配是可选的,您可以通过在您的环境/开发中将此行'config.active_record.mass_assignment_sanitizer =:strict'更改为'config.active_record.mass_assignment_sanitizer =:logger'来避免此类情况。 RB文件 – anusha 2014-09-26 03:00:04

回答

0

我读this question更仔细,发现我的答案

我不得不添加

config.active_record.whitelist_attributes = false 

我的环境(开发/测试/ production.rb),也许是因为我还有安装了protected_attributes宝石。

所以现在我可以高兴地用

ModelName.create(course_id:680, user_id:25) 

毕竟。

我意识到这个问题/答案是上述问题的重复有点的 - 但我没有找到这个问题有点棘手理解,所以除非问我会不会降重视这个问题。