如何在没有控制器的情况下创建一个考虑rails4强参数的模型

时间:2014-09-25 21:02:55

标签: ruby-on-rails-4 strong-parameters

考虑到不再支持attr_accissible,无法通过控制器找到创建模型的可接受方式。

以下方法是否正确?

在我的旧代码中:

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!

(工作但看起来很hacky)

Apparently,以下内容无效,因为在Rails4中删除了without_protection选项

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

1 个答案:

答案 0 :(得分:0)

我仔细阅读了this question并找到了答案

我必须添加

config.active_record.whitelist_attributes = false

到我的环境(development / test / production.rb),也许是因为我仍然安装了protected_attributes gem。

所以现在我可以愉快地使用

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

毕竟。

我意识到这个问题/答案在某种程度上重复了上述问题 - 但我确实发现这个问题有点难以理解,所以除非被问到,否则我不会理解这个问题。