В моей Rails 3 приложения я получил пользователей, которые имеют:Желая элегантный ActiveRecord цепочки
- друзья (и они являются пользователями, тоже)
- деятельности (через PublicActivity)
Существует действие, в котором мне нужно отображать действия моего друга.
Я хотел бы сделать это с помощью цепи, как это (и мой вопрос: , как я могу это сделать):
@activities = current_user.friends.activities
Но это не будет работать, потому что current_user.friends
возвращает ActiveRecrord :: Relation объект.
undefined method `activities' for #<ActiveRecord::Relation:0xc4d7770>
Я должен запросить их так:
@activities = PublicActivity::Activity.where(owner_id: current_user.friend_ids)
Он работает нормально, но это не так элегантно, как я хочу, чтобы это было :)
Итак, есть более элегантный способ запросить действия друга с помощью цепочки?
Модель пользователя выглядеть следующим образом:
class User < ActiveRecord::Base
has_many :friendships
has_many :friends, through: :friendships #
has_many :activities, class_name: "::PublicActivity::Activity", as: :owner
# ...
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: "User"
end
has_many ': extend' может быть тем, что вы ищете? см. http://guides.rubyonrails.org/association_basics.html#association-extensions – house9