0

在我的 Rails 3 应用程序中,我的用户拥有:

有一个动作我需要显示我朋友的活动。

我希望通过这样的链来做到这一点(我的问题是:我该怎么做?):

@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
4

1 回答 1

0

如果我正在正确阅读您正在寻找的内容,那么您似乎正在尝试加入。

ActiveRecord 支持通过 include 调用进行预加载,它也可以有条件。

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

我认为这可以解决您的问题。

于 2013-05-11T07:45:27.730 回答