如何定义范围以获取has_many关联的一条记录?

时间:2013-05-10 23:31:16

标签: ruby-on-rails scope has-many

class User
    has_many :posts do
      def latest(report_date)
        order(:report_date).where('report_date <= ?', report_date).limit(1)
      end
    end
end

class Post
    belongs_to :user
end

我想检索每个用户的最后一篇文章的用户记录。

我可以这样做:

users = User.all.map{|user| user.posts.latest(7.weeks.ago).first}.compact

有没有更好的方法来写这个?类似的东西:

users = User.posts.latest(7.weeks.ago).all

如果有效?

1 个答案:

答案 0 :(得分:1)

我倾向于添加这样的东西。它适用于你的情况吗?它很好,因为你可以包括&#39;它在列表查询...

class User < ActiveRecord::Base
  has_many :posts
  has_one :latest_post, :class_name => 'Post', :order => 'report_date desc'

  ...

end

在实践中,您可以在控制器中执行以下操作:

@users = User.include(:latest_post)

然后,在您呈现用户的视图中,您可以引用user.lastest_post并且它将被急切加载。

例如 - 如果这是在index.html.haml

= render @users

您可以访问_user.html.haml

中的latest_post
= user.name
= user.latest_post.report_date