我有一个Category
模型,可以有多个父类别和子类别。我使用包含Hierarchy
和parent_category
属性的child_category
模型对此进行了建模。
我可以使用
验证行是唯一的 validates_uniqueness_of :parent_category_id, scope: :child_category_id
这(以及数据库中相应的唯一索引)注意没有多行表示相同的父子关系。
但是,我想阻止某人将孩子的父母分配为孩子。对于前者如果类别A是类别B的父类,则将类别A指定为类别B的子类应导致验证错误。
我能想到的唯一方法是使用validate
方法查询数据库。
def child_parent_messup
unless Hierarchy.where(child_category_id: parent_category_id, parent_category_id: child_category_id).blank?
errors[:base] << "This child is also a parent of the same class."
end
end
如何改进?
答案 0 :(得分:1)
你所指的是一种'循环'关系 - 而且,恕我直言,为此没有为轨道内置的默认验证器。
答案 1 :(得分:0)
为简化起见,您可以执行以下操作:
您的设计似乎有点复杂,看看您是否可以使其更简单。可能是SIngle Table Inheritance在这里有意义,包括更好的验证处理。我可能错了,因为我对这个要求不太了解。