Ruby on rails 想要优雅的ActiveRecord链接

Ruby on rails 想要优雅的ActiveRecord链接,ruby-on-rails,ruby-on-rails-3,activerecord,rails-activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,Rails Activerecord,在我的Rails 3应用程序中,我得到了以下用户: 朋友(他们也是用户) 活动(通过) 有一个动作,我需要显示我朋友的活动 我希望通过这样的链条来实现这一点(我的问题是:我如何才能做到?): 但它不起作用,因为当前用户.friends返回一个ActiveRecord::Relation对象 undefined method `activities' for #<ActiveRecord::Relation:0xc4d7770> 它工作正常,但没有我想要的那么优雅:) 那么,有

在我的Rails 3应用程序中,我得到了以下用户:

  • 朋友(他们也是用户)
  • 活动(通过)
有一个动作,我需要显示我朋友的活动

我希望通过这样的链条来实现这一点(我的问题是:我如何才能做到?):

但它不起作用,因为
当前用户.friends
返回一个ActiveRecord::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
class用户
如果我正确地阅读了您要查找的内容,那么您似乎正在尝试加入

ActiveRecord支持通过includes调用进行即时加载,该调用也可以有条件


我认为这会解决您的问题。

实际上,加入或包含不是问题-我只是在寻找更优雅的AR查询方式。无论如何,谢谢:)有很多
:extend
可能是你要找的?看见
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