1

この質問はとても単純だと思うので、グーグルで調べる方法がわかりません。

:premiumRoR で、またはのような保護された属性があり、が特定のこと (プレミアム アカウントにサインアップするか、電話番号を提供するような単純なこと) を行う:admin場合にのみ変更したい場合、どうすればよいでしょうか? User特定の条件が満たされた場合にのみ変更されるはずですが、誰かがその条件を偽造できるようにしたくありません。

「premimum」や「admin」などは一括割り当てで避けたいのは承知しています。では、ユーザーが特定のフォームに記入した場合、どのように変更するのでしょうか?

便利なリンクがあれば教えてください。これをどのように表現すればよいかわかりませんが、簡単な解決策だと思います。

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

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 に答える