Ruby on rails 基于角色的验证

Ruby on rails 基于角色的验证,ruby-on-rails,validation,Ruby On Rails,Validation,对,所以我有一个用户表和不同的用户。在将用户表移动到主站点之前,我需要在更新时验证它们 到目前为止,我刚刚完成了以下工作,是否有一种方法可以根据角色阻止验证,而无需执行自定义验证方法,如使用_options:on=>:update 验证前:检查\u角色 if check_role = "developer" do |dev| dev.validate :first_name, presence: true # this doesn't work btw... end def chec

对,所以我有一个用户表和不同的用户。在将用户表移动到主站点之前,我需要在更新时验证它们

到目前为止,我刚刚完成了以下工作,是否有一种方法可以根据角色阻止验证,而无需执行自定义验证方法,如使用_options:on=>:update

验证前:检查\u角色

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

我想出来了,这似乎是最好的方法:

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

我必须对每一列执行该过程,还是可以在块中调用它?我想在块中执行该过程,这样我就可以在每一行上都不使用if进行所有验证。保持干燥…您可以组合验证条件,以便仅使用一次
if
validates :first_name, presence: true, if: :developer?

def developer?
  role == 'developer'
end
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