当我创建一个脚手架并且我需要与另一个模型有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
和:subject
添加到attr_accessible
字段列表中,以便我也可以使用这些字段进行批量分配,这会对您造成任何伤害吗?
答案 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)
我认为它不会伤害你,但会给你的代码带来一些混乱