我有以下型号:
class ServiceType
has_many :plans
end
class Plan
belongs_to :service_type
has_many :agreements
end
class Agreement
belongs_to :plan
validates :external_reference, :uniqueness => {:scope => Plan.service_type_id} << this is wrong!
end
我需要强制使用作为ServiceType范围的Agreement.external_reference的唯一性。无法弄清楚要实现的语法。
EDIT 我最终解决了这个问题:
最后我做了:
class Agreement
before_validation :set_service_type
belongs_to :plan
validates :external_reference, uniqueness: {scope: :service_type_id}
private
def set_service_type
self.service_type_id = self.plan.service_type_id
end
end
感谢你的所有建议。
答案 0 :(得分:0)
尝试以下fromat
in rails 2
validates_uniqueness_of :external_reference, :scope => :your_scope
in rails 3
validates :external_reference, :uniqueness => {:scope => :your_scope}
答案 1 :(得分:0)
您可以使用自定义验证。
假设validates_uniqueness_of_external_reference_on_service_type
您必须执行以下操作:
class ServiceType
has_many :plans
has_many :agreements, through: :plan
end
class Agreement
belongs_to :plan
validate :validates_uniqueness_of_external_reference_on_service_type
def validates_uniqueness_of_external_reference_on_service_type
errors.add(:external_reference, 'has already been taken on current service type') if plan.service_type.agreements.exists?(external_reference: external_reference)
end
end