考虑到不再支持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
答案 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)
毕竟。
我意识到这个问题/答案在某种程度上重复了上述问题 - 但我确实发现这个问题有点难以理解,所以除非被问到,否则我不会理解这个问题。