Правильный способ принудительной уникальности модели соединения ? (has_many: through)

У меня есть отношения родитель / потомок через нашу таблицу пользователей с моделями как таковыми:

class User < ActiveRecord::Base

  # Parents relationship
  has_many :children_parents, :class_name => "ParentsChild", :foreign_key => "child_id", :dependent => :destroy
  has_many :parents, :through => :children_parents

  # Children relatiopnship
  has_many :parents_children, :class_name => "ParentsChild", :foreign_key => "parent_id", :dependent => :destroy
  has_many :children, :through => :parents_children
  ...
end

И в parent_child.rb:

class ParentsChild < ActiveRecord::Base

  belongs_to :parent, :class_name => "User"
  belongs_to :child, :class_name => "User"

end

Прямо сейчас это возможно в нашем "добавлении детей" форма (просто используя вложенные атрибуты vanilla), чтобы несколько раз добавить одного и того же пользователя в качестве ребенка для родителей. Я не уверен, какой «правильный» способ добиться уникальности в отношениях ParentsChild, хотя я склоняюсь к уникальному индексу на (parent_id, child_id) на уровне базы данных (конечно, с использованием миграции

Я уверен, что мог бы также установить ограничения уникальности в методе UsersController :: update, но предпочел бы избегать изменения этого кода (прямо сейчас он вообще не ссылается на родителей / детей, благодаря вложенным атрибутам в форма / модель), если возможно. Меня больше всего беспокоит то, чтобы мы использовали «правильное» решение. Каков «правильный» или «рельсовый» способ сделать это?

5
задан Brett Bender 22 October 2010 в 15:36
поделиться