我使用Rails才几个月,所以我可能缺少一些明显的东西,但如果attr_accessible
或attr_protected
保护一个属性不受大规模分配的影响,那么在第一次创建记录时如何设置该属性?(并以一种仍然安全的方式进行。)
例如:
假设我正在开发一个应用程序,该应用程序可以跟踪公司员工接受过培训的不同程序和流程
作为这个应用程序的一部分,我有三个模型:User
、Course
和TrainingClass
。User
代表员工,Course
代表员工可以接受培训的不同内容,TrainingClass
代表员工将接受课程培训的特定类别。
TrainingClass
与Course
模型(因为类基本上只是课程的特定实例)和User
模型(因为该类有一个单独的讲师,他是创建TrainingClass
的用户)都具有belongs_to
关系。类似地,Course
和User
模型都与TrainingClass
模型具有has_many
关系。
根据这些信息,我将如何为TrainingClass
创建新记录?
我可以说:
course.training_classes.build(user_id: user.id)
或
user.training_classes.build(course_id: course.id)
但这不是对user_id
或course_id
属性的大规模分配吗?
在保持应用程序安全的同时,最好的方法是什么?
阅读有关批量分配安全性的信息,特别是角色。
你可以有
class TraningClass < ActiveRecord::Base
attr_accessible .....
attr_accessible ....., :user_id, as: :create
end
其中,......
是要访问以进行批量分配的其他属性的列表。然后,当您调用build
时,您将传递该角色
course.training_classes.build({user_id: user.id}, as: :create)
对其他型号重复类似操作。默认角色将被使用(第一个),除非您在调用build
、create!
等时指定:create
角色。