1

我认为这个问题是如此简单,以至于我不知道如何用谷歌搜索它。

在 RoR 中,如果我有一个类似:premiumor的受保护属性:admin,并且我只想在 aUser执行特定操作(注册高级帐户或提供电话号码等简单的操作)时更改它,我该怎么做?只有在满足某些条件时才应该改变,但我不希望有人能够伪造这些条件。

我了解诸如“高级”或“管理员”之类的事情,我想通过批量分配来避免。那么如果用户填写了某个表格,你如何更改它呢?

随意将我引导到任何有用的链接,我只是不知道如何措辞,但我认为这是一个简单的解决方案。

4

1 回答 1

3

阅读有关批量分配的信息

您可以创建角色

attr_accessible :first_name, :last_name                            # default role
attr_accessible :first_name, :last_name, :premium, :as => :special # 'special' role

调用.update_attributes(params)此模型时,将使用默认角色;如果:premium在 中找到params,则会抛出错误。

POST您的特殊形式的方法中,您可以为like指定:special角色,指示使用允许大规模分配属性的角色。update_attributes.update_attributes(params, :special)update_attributes:special:premium

您可以根据 in 的某些属性有条件地传递角色名称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_attributes可能看起来像

@the_model.update_attributes(params, TheModel.special_role?(params) ? :special : :default)
于 2012-11-27T00:29:01.070 回答