Rails 3.2根据不同的模型进行验证

时间:2013-05-20 20:08:51

标签: ruby-on-rails-3

我将如何使这项工作?我想根据不同模特的标准验证奖项提名。

      class Award < ActiveRecord::Base

  belongs_to :manager, :class_name => 'Manager', :foreign_key => 'manager_username'



  def cant_be_manager
     if nominee_username == Manager.username   
       errors.add(:nominee, "is a manager and cannot be nominated.")
     end
  end

end

2 个答案:

答案 0 :(得分:2)

试试这个:

class Award < ActiveRecord::Base

  belongs_to :manager, :class_name => 'Employee', :foreign_key => 'manager_username'

  validate :cant_be_manager  # <----- added this line

  def cant_be_manager
     if nominee_username == manager.username    # <----- lower case m
       errors.add(:nominee, "is a manager and cannot be nominated.")
     end
  end

end

但是(只是在这里猜测你的模型是什么样的)我想知道第二条修改后的行不应该是:

if nominee_username == manager_username    

belongs_to行表示您的奖励表中有一个manager_username字段,但在Rails中更常见的是这是一个manager_id字段,belongs_to行看起来像这样:

belongs_to :manager, :class_name => 'Employee', :foreign_key => 'manager_id'

如果确实如此,您的代码应如下所示:

class Award < ActiveRecord::Base

  belongs_to :manager, :class_name => 'Employee', :foreign_key => 'manager_id'  # <----- changed

  validate :cant_be_manager  # <----- added this line

  def cant_be_manager
     if nominee_id == manager_id    # <----- changed
       errors.add(:nominee, "is a manager and cannot be nominated.")
     end
  end

end

这假设您试图阻止员工提名自己的经理,但员工可以提名其他经理或管理人员提名其他经理。如果您想要阻止任何人提名任何经理,请告诉我您如何知道员工是否是经理(可能是您的员工模型中的属性或方法),我将更新答案。

答案 1 :(得分:0)

也许是smth。像这样?

class Award < ActiveRecord::Base
  validate :cant_be_manager

  def cant_be_manager
  .....
end

也可以看到这个问题:Rails custom validation