Rails和SQL,如何在表关联的所有成员上使用.last

Rails和SQL,如何在表关联的所有成员上使用.last,sql,ruby-on-rails,ruby-on-rails-3,Sql,Ruby On Rails,Ruby On Rails 3,到目前为止,我试图形成正确的查询,但收效甚微 假设我有用户和帖子 用户有很多帖子,帖子属于用户 posts有一个可见的布尔字段 我试图在用户模型中编写一个作用域,该作用域遍历所有用户,找到他们的最后一篇文章,并且仅在用户的最后一篇文章中可见布尔值为true时返回用户 类似于Users.posts.last.where:visible=>true,但作为一个范围 编辑 我试图将返回值保留为AR关系对象,常规数组无法用于我试图使用范围的对象。谢谢你的意见 也许像这样的事情应该行得通。。未经测试 cl

到目前为止,我试图形成正确的查询,但收效甚微

假设我有用户和帖子

用户有很多帖子,帖子属于用户

posts有一个可见的布尔字段

我试图在用户模型中编写一个作用域,该作用域遍历所有用户,找到他们的最后一篇文章,并且仅在用户的最后一篇文章中可见布尔值为true时返回用户

类似于Users.posts.last.where:visible=>true,但作为一个范围

编辑


我试图将返回值保留为AR关系对象,常规数组无法用于我试图使用范围的对象。谢谢你的意见

也许像这样的事情应该行得通。。未经测试

class User

  def User.users_with_visible_posts
    User.includes(:posts).map {|user| user.posts.last && !!user.posts.last.visible}
  end
end

User.users_with_visible_posts #=> [Users with last post visible]

这将返回最后一篇可见的文章,我希望返回最后一篇可见文章的用户。对不起,读得太快还有另一个答案,只是没有作为作用域完成,你肯定要使用作用域吗?我认为,在这两个答案之间,你可以找出如何将其作为一个作用域来执行,如果不是,我将对其进行重击。需要将其作为一个作用域或一个返回AR关系对象的类方法,因为我需要在应用程序的其他区域对返回的结果执行进一步的查询。我真的对这一点摸不着头脑,我可以;I don’我看不出一种不借助存储产品的方法。最后是一个数组方法,一旦你将它应用于AR关系,你就会被一个活动记录实例卡住,这破坏了你将它全部保存在AREL中并始终具有AR关系的尝试。这正确地完成了所有这些操作,确实可以检查是否满足条件,但返回了一个数组值,我试图将输出保持为activerecord关系对象
class User < ActiveRecord::Base 
  has_many :posts
  scope :last_visable_post, posts.where("visible = ?",true).last
end