2013-12-04 4 views
0

Правильно, поэтому у меня есть одна таблица пользователей с разными пользователями. Мне нужно проверить таблицы пользователей на обновление до того, как они перейдут на основной сайт.Проверка, основанная на роли

до сих пор я только что сделал следующее, есть способ, которым я могу блокировать валидации в зависимости от роли, не делая метод пользовательской проверки, как with_options: на =>: обновление

before_validation: check_role

if check_role = "developer" do |dev| 
    dev.validate :first_name, presence: true # this doesn't work btw... 
end 

def check_role 
    return self.role_type unless self.role_type == nil 
end 

ответ

1

Я полагаю, что это, и это выглядит как самый лучший способ сделать это:

class YourModel 

    with_options :if => lambda { |o| o.whatever == "whatever" } do |on_condition| 
    on_condition.validates_presence_of :address 
    on_condition.validates_presence_of :city 
    end 

    with_options :if => lambda { |o| o.condition_the_second == "whatever" } do |on_condition| 
    on_condition.validates_presence_of :foo 
    on_condition.validates_presence_of :bar 
    end 
end 
0
with_options :if => Proc.new {|user| user.role_type == 'developer'} do |developer| 
    developer.validates :first_name, :presence => true 
end 
+0

Должен ли я выполнять эту процедуру для каждого отдельного столбца или я могу назвать ее в блоке? –

0
validates :first_name, presence: true, if: :developer? 

def developer? 
    role == 'developer' 
end 
+0

Я хотел сделать это в блоке, чтобы я мог выполнять все проверки без использования if в каждой строке. Сохранение DRY ... –

+0

Вы можете комбинировать условия проверки, чтобы использовать 'if' только один раз. – NARKOZ

Смежные вопросы