如何在ActiveRecord中指定为accepts_nested_attributes_for设置的字段

Tam*_*Tam 5 activerecord ruby-on-rails nested-attributes

我有类似的东西:

class Profile < ActiveRecord::Base
   belongs_to :user    
   delegate :full_name, :to => :user

   accepts_nested_attributes_for :user
   .......
Run Code Online (Sandbox Code Playgroud)

这工作正常,因为我希望配置文件能够在用户中设置first_name和last_name.但是,如果用户在表单中注入其他参数,这会带来安全威胁.

如何使accepts_nested_attributes_for只接受first_name和last_name并删除其他参数?

小智 0

我能想到两种选择,它们实际上与您无需通过 anaf 处理批量分配的方式相同。

  1. Accepts_nested_attributes_for 将尊重用户模型上的 attrs_accessible 。如果您指定某个属性不向用户模型上的批量分配公开,则也无法通过accepts_nested_attributes_for 对其进行分配。

  2. 您可以在配置文件控制器中处理卫生问题。将传递给用户模型的属性将位于 params[:profile][:user_attributes] 下。然后,您可以使用 仅slice获取您想要允许的属性,或者使用except删除您不想允许的属性。尽管我更喜欢将允许的属性列入白名单而不是列入黑名单。

选项 1 会影响您为用户模型使用质量分配的任何位置,而选项 2 只会影响通过配置文件控制器传入的参数