Проверка на основе связанной записи - PullRequest
0 голосов
/ 26 января 2011

У меня есть две модели: Пользователь и Урок.Я хочу, чтобы уроки назначались только администраторам.

Каков наилучший способ обеспечить это?В настоящее время я пытаюсь создать собственный валидатор, например:

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 Ответ

2 голосов
/ 26 января 2011

Я думаю, что самый простой способ сделать это:

# 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?.

...