我想有一个更系统的解决方案为我自己,以避免质量分配。替换params散列,敏感元件,以避免在Rails的质量分配
一个典型的情况是,以除去从PARAMS ID或USER_ID(经由表格自动提交)中,用current_user.id内部替换它(在#myController的创建)。
一个解决方案,我能想到的是从PARAMS哈希创建对象,然后(父和子对象)update_attributes方法与内部值替换敏感属性:
@user = User.create(:params[:user])
@user.update_attributes(:id => current_user.id)
@user.profile.update_attributes(:user_id => current_user.id)
@user.preference.update_attributes(:user_id => current_user.id)
是否有一个较短/更干燥方式说这个?
如果偏好,配置文件等被用户的子对象(通过构建方法创建的),我怎么能写来寻找用户的外键,并自动与我传递给父值替换它们的方法?
谢谢。
感谢扎卡里。你能否详细说明你将如何做我想用attr_accessible做的事情?我知道attr_protected等,但我不知道如何以DRY的方式分配受保护的属性。 – AdamNYC 2012-01-09 16:36:59
它与'attr_protected'工作方式相同,但它是白名单而不是黑名单。所以,如果你有一个名为'name','email',属性'password'你会做'attr_accessible:姓名,:电子邮件:password'然后你只能质量分配的3个属性。 – 2012-01-09 16:48:16
对不起,但我的问题是你如何实际处理你的控制器中的这些受保护的属性。 – AdamNYC 2012-01-09 17:31:51