在Rails中,如何在第一次创建对象时保护属性不受大规模赋值的影响,同时仍然允许设置属性



我使用Rails才几个月,所以我可能缺少一些明显的东西,但如果attr_accessibleattr_protected保护一个属性不受大规模分配的影响,那么在第一次创建记录时如何设置该属性?(并以一种仍然安全的方式进行。)


例如:

假设我正在开发一个应用程序,该应用程序可以跟踪公司员工接受过培训的不同程序和流程

作为这个应用程序的一部分,我有三个模型:UserCourseTrainingClassUser代表员工,Course代表员工可以接受培训的不同内容,TrainingClass代表员工将接受课程培训的特定类别。

TrainingClassCourse模型(因为类基本上只是课程的特定实例)和User模型(因为该类有一个单独的讲师,他是创建TrainingClass的用户)都具有belongs_to关系。类似地,CourseUser模型都与TrainingClass模型具有has_many关系。

根据这些信息,我将如何为TrainingClass创建新记录?

我可以说:

course.training_classes.build(user_id: user.id)

user.training_classes.build(course_id: course.id)

但这不是对user_idcourse_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)

对其他型号重复类似操作。默认角色将被使用(第一个),除非您在调用buildcreate!等时指定:create角色。

最新更新