3

当我创建一个脚手架并且我需要与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_id和添加到字段subject_id列表中。通过添加和到字段列表以便我也可以使用它们进行批量分配,我attr_accessible是否会造成任何伤害?:user:subjectattr_accessible

4

2 回答 2

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]).

于 2012-09-24T12:10:48.870 回答
0

我认为它不会伤害你,但会在你的代码中带来一种混乱

于 2012-09-24T19:01:47.783 回答