2011-01-25 23 views
0

私は2つのモデルを持っています:ユーザとレッスン。私は管理者であるユーザーにレッスンを割り当てたいだけです。関連付けられたレコードに基づく検証

これを確認する最も良い方法は何ですか?

class BelongsToAdminValidator < ActiveModel::EachValidator 
    def validate_each(object, attribute, value) 
    unless value.admin? 
     object.errors[attribute] << (options[:message] || "must belong to an admin") 
    end 
    end 
end 

しかし、これは言ってRSPECにつながる:

undefined method `admin?' for nil:NilClass 

理にかなって私は現在、そのようなカスタムバリデータを作成しようとしています。

これを行うにはカスタムバリデーターが最適ですか?または、割り当てられたユーザーがコントローラの管理者であるかどうかを確認する必要がありますか?

+1

'admin'は' User'で定義されたメソッドですか?多分それは 'object.admin? – zetetic

+0

これはブール値で、自動的に "?"方法。 –

答えて

2

私はそれを行うための最も簡単な方法があると思う:

# Lesson model 
validate :allow_only_admins 

private 
def allow_only_admins 
    errors.add(:user, "must be admin user!") if (user.blank? || !user.admin?) 
end 

私はあなたが関連がuserを命名し、ユーザーオブジェクトがadmin?メソッドに応答することをしていると仮定しました。

+0

パーフェクト。私のアプローチよりもずっと簡単です。ありがとうございました! –

関連する問題