Этот код взят из предыдущего вопроса, но мой вопрос имеет к нему непосредственное отношение, поэтому я скопировал его здесь:
class User < ActiveRecord::Base
has_many :group_memberships
has_many :groups, :through => :group_memberships
end
class GroupMembership < ActiveRecord::Base
belongs_to :user
belongs_to :role
belongs_to :group
end
class Role < ActiveRecord::Base
has_many :group_memberships
end
class Group < ActiveRecord::Base
has_many :group_memberships
has_many :users, :through > :group_memberships
end
Новый вопрос ниже
Как вы можете продвинуть приведенный выше код на один шаг вперед и добавить и работать с друзьями?
class User < ActiveRecord::Base
has_many :group_memberships
has_many :groups, :through => :group_memberships
has_many :friends # what comes here?
has_many :actions
end
В коде выше я также добавил действия. Допустим, система отслеживала действия каждого пользователя на сайте. Как бы вы запрограммировали это так, чтобы каждое действие было уникальным и сортировалось с самым последним наверху для всех друзей пользователя?
<% for action in @user.friends.actions %>
<%= action.whatever %>
<% end %>
Код выше может быть недействительным, вы можете сделать что-то вроде того, что у меня ниже, но тогда действия не будут отсортированы.
<% for friend in @user.friends %>
<% for action in friend.actions %>
<%= action.whatever %>
<% end %>
<% end %>
UPDATE
Полагаю, реальная проблема здесь в том, как определить друзей? Создать новую модель или объединить таблицу, которая связывает пользователей с другими пользователями? В идеале я хотел бы определить друзей через общее членство в группах других пользователей, но я не уверен, как это определить.
has_many :friends, :through => :group_memberships, :source => :user
Но это не работает. Какие-нибудь идеи или предложения по передовому опыту?