0

2 種類のユーザーが編集できるモデルがあります。最初のユーザーにはログインがあり、特別な権限があります (「ユーザー」と呼びましょう)。2 つ目は、限られた権限を持つログインを持たないランダムなユーザーです (「ゲスト」と呼びましょう)。

ゲストは実際には 1 つのコントローラーを介してのみモデルとやり取りするため、特定の検証をこの場合にのみ適用する必要があります。適用したいバリデーションはモジュール内に存在します。

コントローラーアクションで次のようなことを試みましたが、うまくいかなかったようです:

@object = Model.find(params[:object_id])
@object.extend SpecialValidations

次に、オブジェクトの有効性を (おそらく直接または属性の更新時に) チェックし、検証によって生成されたエラーを表示します。

これを行うより良い方法はありますか?

ありがとう!

4

2 に答える 2

1

1 つの代替方法は、モデルに以下を含めることです。

attr_accessor :guest

def run_special_validations?
    guest
end

validate :special_validation1, if: run_special_validations?
validate :special_validation2, if: run_special_validations?

次に、コントローラーを設定@object.guest = trueすることにより、オブジェクトに条件付き検証を実行するように指示します。

于 2012-06-08T22:56:54.973 に答える
0

条件なしで検証を保持し、userコントローラーでスキップすることができます (update_attributeたとえば、メソッドを使用して)。

于 2012-06-09T01:06:05.937 に答える