Rails验证相关字段是否具有相关字段

时间:2015-08-29 13:41:38

标签: ruby-on-rails

我有这四种模式:

sprintf("%<foo>s", { :foo => 456 })
=> "456"
sprintf("%{foo} : %{foo}s", { :bar => 123, :foo => 456 })
=> "456 : 456s"

创建新工作订单时,我想验证员工是否属于所选工作组。

如何在工作订单模型中对该验证进行编码?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我会在workorder模型中编写一个自定义验证方法。所以它可能看起来像这样。

class Workorder < ActiveRecord::Base        
  belongs_to :employee
  belongs_to :workgroup
  validate :check_employee_workgroup

  private
  def check_employee_workgroup
    errors.add(:employee_id, "Employee is not available in this work group") unless
    self.employee.workgroups.select(:id).where(id: [self.workgroup_id]).exists?         
  end
end

答案 1 :(得分:0)

这样做的必要性可能是一个设计问题。也许你应该修改你的类看起来像这样:

class Workgroup < ActiveRecord::Base
    has_many :empgroups
    has_many :employees, through: :empgroups

class Empgroup < ActiveRecord::Base
    attr_accessible :employee_id, :workgroup_id
    belongs_to :employee
    belongs_to :workgroup

class Employee < ActiveRecord::Base
    has_many :empgroups
    has_many :workgroups, through: :empgroups

class Workorder < ActiveRecord::Base        
    belongs_to :empgroup

这样,您根本不需要自定义验证器。从那里,您可以添加任何其他:必要的关系