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