对于Rails / ActiveRecord,模型和:attr_accessible中的model_id之间有什么区别?

时间:2012-09-24 08:40:30

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2 scaffolding

当我创建一个脚手架并且我需要与另一个模型有belongs_to关系时,我添加一个名为model_id的字段(用该模型的名称替换模型):

rails generate scaffold Grade user_id:integer subject_id:integer letter:string

然后在上面的Grade模型中,我可能会添加:

belongs_to :user
belongs_to :subject

Rails会自动将user_idsubject_id添加到attr_accessible字段列表中。通过将:user:subject添加到attr_accessible字段列表中,以便我也可以使用这些字段进行批量分配,这会对您造成任何伤害吗?

2 个答案:

答案 0 :(得分:2)

attr_accessible旨在防止来自外部发送到您的应用程序的数据的大规模分配攻击。在大多数情况下,您可能在创建和创建中执行此类操作。更新行动:

@model = Model.new(params[:model])
or
@model.update_attributes(params[:model])

你应该问问自己为什么你有一个使用subject_id的表单和另一个使用subject的表单。这里唯一真正的危害是不一致,这实际上对大型项目非常不利。如果您遵循约定,所有表单都将使用实际的数据库列(subject_id),那么当您不记得为什么以两种不同的方式执行它时,您将在以后避免一些头痛。

如果您通过控制台更新属性,则可以使用update_attributes(params[:model], without_protection: true)或我编写的名为sudo_attributes的gem,它可以让您sudo_update_attributes(params[:model])

答案 1 :(得分:0)

我认为它不会伤害你,但会给你的代码带来一些混乱