如何验证兄弟姐妹的名字属性的唯一性?

时间:2016-07-05 13:15:46

标签: ruby-on-rails ruby-on-rails-4 ancestry

我通过Category gem获得了具有树结构的ancestry模型。 我希望兄弟姐妹拥有独特的名字,例如:

Books:
  Science
  science (not valid)

但是

Books:
  Science
  Children:
    Science (valid)

如何设置此验证?

2 个答案:

答案 0 :(得分:2)

您可以在定义范围的情况下使用Rails validate uniqueness

例如,假设您有一个名为parent_id的列,那么您的验证将如下所示

validates :name, uniqueness: { scope: :parent_id }

答案 1 :(得分:0)

您可以使用ActiveRecord validate编写自己的验证程序,以检查父记录的子项,如:

class Category < ApplicationRecord
  has_ancestry
  validate :children_name_is_unique

  def children_name_is_unique
    return unless parent.try(:has_children?)
    if Category.where(id: parent.child_ids, name: name).exists?
      errors.add(:name, 'Duplicate children name')
    end
  end
end