Я запутался в том, что вы пытаетесь сделать с помощью FriendGroups.
Ваша базовая дружба смоделирована как:
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User"
end
class User < ActiveRecord::Base
has_many :friendships
has_many :friends, :through => :friendships
end
Вы хотите массово создавать записи о дружбе между всеми пользователями, которых вы проходите? Это, наверное, какая-то проблема перестановок. Не то, для чего вам нужна другая модель. Может быть, метод класса на дружбе, как interconnect(user_ids)
.
Если вы хотите найти группы пользователей, которые все являются друзьями друг друга, похоже, что вы знакомы с теорией графов и связями.
EDIT:
В случае если FriendGroups были просто общими контейнерами друзей с прикрепленным именем, я бы сделал что-то вроде этого:
class User < ActiveRecord::Base
has_many :friend_groupings
has_many :friend_groups
has_many :friendships
has_many :friends, :through => :friendships
end
class FriendGrouping < ActiveRecord::Base
belongs_to :friend_group
belongs_to :friend
end
class FriendGroup < ActiveRecord::Base
has_many :friend_groupings
has_many :friends, :class_name => "User", :through => :friend_groupings
belongs_to :user
validates_presence_of :name # Name of FriendGroup
end
Я бы, вероятно, вложил FriendGroups в группу Users и имел бы FriendGroups accept_nested_attributes_for FriendGroupings. Я хотел бы сделать это в контроллере FriendGroup и в представлении FriendGroup разрешить пользователю устанавливать имя группы, а затем ставить ему флажки для каждого из своих друзей, чтобы поместить в группу. Для каждого друга, которого они выбирают, создайте новую FriendGrouping между FriendGroup и User. Это должно дать вам то, что вы хотите.