Ruby on rails 自定义Rails4模型验证中的限制查询

Ruby on rails 自定义Rails4模型验证中的限制查询,ruby-on-rails,validation,Ruby On Rails,Validation,尝试RubyonRails我正在做一个小应用程序。到目前为止,我喜欢铁路的方式。我有一个模范政府,有一个经理和一个组织 我希望通过验证确保分配给该管理部门的经理与该管理员所属的组织相关联 我有一个有效的验证,但我的直觉告诉我,它在查询上很昂贵 class Administration < ActiveRecord::Base belongs_to :organisation belongs_to :manager, :class_name => "User", :f

尝试RubyonRails我正在做一个小应用程序。到目前为止,我喜欢铁路的方式。我有一个模范政府,有一个经理和一个组织

我希望通过验证确保分配给该管理部门的经理与该管理员所属的组织相关联

我有一个有效的验证,但我的直觉告诉我,它在查询上很昂贵

class Administration < ActiveRecord::Base

    belongs_to :organisation
    belongs_to :manager, :class_name => "User", :foreign_key => 'manager_id'

    validates :code, numericality: true
    validates :manager_id, :presence => true
    validates :organisation_id, :presence => true
    validates :code, uniqueness: { scope: :organisation_id, message: 'BB: Code already in use' }

    validate :manager_belongs_to_organisation

    def manager_belongs_to_organisation
        errors.add(:base, 'BB: Manager does not exist') unless Organisation.find(self.organisation_id).users.include?(User.find(self.manager_id))
    end
end

对这件事有什么想法吗?

解决这个问题的一种方法是只指派经理来管理。然后使用“保存前”回调自动插入组织id:

class Administration
   ...

   before_save :update_organization_id

   ...

   def update_organization_id
     self.organization_id = self.manager.organization_id
   end
end

您的数据模型似乎存在更多问题。 请不要忘记。在管理模型中,检查经理和组织之间的关系。 总的来说,这是个坏主意

你的经理只有一个组织吗?如果是这样,更好的解决方案是只存储管理器,并在需要时调用Administration.manager.organization。并将验证添加到Manager模型中:


管理者不是管理一个组织,而是管理一个或多个行政部门。Dimakura为我指明了正确的方向。你的解决方案对我有效!这就是ad-hoc编码的情况。但是嘿。。。这就是小提琴的好处。谢谢
validates :organization, presence: true