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
如果有效?
答案 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