Ruby on rails 自定义Rails4模型验证中的限制查询
尝试RubyonRails我正在做一个小应用程序。到目前为止,我喜欢铁路的方式。我有一个模范政府,有一个经理和一个组织 我希望通过验证确保分配给该管理部门的经理与该管理员所属的组织相关联 我有一个有效的验证,但我的直觉告诉我,它在查询上很昂贵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
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