Ruby on rails 表单之后如何更改rails中的受保护属性
我觉得这个问题太简单了,我不知道如何用谷歌搜索它 在RoR中,如果我有一个受保护的属性,如Ruby on rails 表单之后如何更改rails中的受保护属性,ruby-on-rails,mass-assignment,Ruby On Rails,Mass Assignment,我觉得这个问题太简单了,我不知道如何用谷歌搜索它 在RoR中,如果我有一个受保护的属性,如:premium或:admin,并且我只想在用户做了一些特定的事情(注册premium帐户或提供电话号码这样简单的事情)时更改它,我将如何做?它应该只有在满足某些条件时才会改变,但我不希望有人能够伪造这些条件 我知道像“premimum”或“admin”这样的事情,我希望通过大规模分配来避免。那么,如果用户填写了某个表单,您如何更改它呢 请随意给我指点任何有用的链接,我只是不知道该如何表达,但我认为这是一个
:premium
或:admin
,并且我只想在用户
做了一些特定的事情(注册premium帐户或提供电话号码这样简单的事情)时更改它,我将如何做?它应该只有在满足某些条件时才会改变,但我不希望有人能够伪造这些条件
我知道像“premimum”或“admin”这样的事情,我希望通过大规模分配来避免。那么,如果用户填写了某个表单,您如何更改它呢
请随意给我指点任何有用的链接,我只是不知道该如何表达,但我认为这是一个简单的解决方案。阅读
您可以创建角色
attr_accessible :first_name, :last_name # default role
attr_accessible :first_name, :last_name, :premium, :as => :special # 'special' role
在此模型上调用.update_attributes(params)
时,将使用默认角色;如果在参数中找到:premium
,它将抛出一个错误
在特殊表单的POST
方法中,您需要为更新_属性
指定:special
角色,如.update_属性(参数,:special)
,指导update\u attributes
使用:special
角色,该角色允许批量分配:premium
属性
您可以根据params
中的某些属性有条件地传递角色名称,就像电话号码具有您提到的值一样
@the_model.update_attributes(params, params[:phone_no].present? ? :special : :default)
如果这些条件比较复杂,您可以考虑将它们作为类方法添加到模型
def self.special_role?(params)
# fancy conditions here, returning true/false
end
然后,update\u属性
@the_model.update_attributes(params, TheModel.special_role?(params) ? :special : :default)
使用:role
选项完全可以避免大规模分配?我在将其与CanCan相结合时也遇到了一些问题。必须skip\u load\u resource:only=>…
才能添加角色。谢谢