У меня есть отношения родитель / потомок через нашу таблицу пользователей с моделями как таковыми:
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, но предпочел бы избегать изменения этого кода (прямо сейчас он вообще не ссылается на родителей / детей, благодаря вложенным атрибутам в форма / модель), если возможно. Меня больше всего беспокоит то, чтобы мы использовали «правильное» решение. Каков «правильный» или «рельсовый» способ сделать это?