Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在不使用first或last的情况下从数组中提取最新的对象?_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 如何在不使用first或last的情况下从数组中提取最新的对象?

Ruby on rails 如何在不使用first或last的情况下从数组中提取最新的对象?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,我想从一系列帖子中找出最新的帖子。但由于某种原因,首先使用.first会把事情搞砸。对一些人来说,它是拉最新的,而对一些人来说,它是拉最老的 我有:default\u范围顺序:posts.created\u在DESC 所以,首先应该给我最新的帖子,但有时不是。有没有更好的方法获得最新的帖子 更新 这是我的控制器代码: @users=User.includes(:ideas).order('users.updated_at DESC') 我想按上次更新的描述对用户进行排序,然后为每个用户显示其最近

我想从一系列帖子中找出最新的帖子。但由于某种原因,首先使用
.first
会把事情搞砸。对一些人来说,它是拉最新的,而对一些人来说,它是拉最老的

我有:
default\u范围顺序:posts.created\u在DESC

所以,首先应该给我最新的帖子,但有时不是。有没有更好的方法获得最新的帖子

更新

这是我的控制器代码:

@users=User.includes(:ideas).order('users.updated_at DESC')

我想按上次更新的描述对用户进行排序,然后为每个用户显示其最近的帖子。我认为
默认范围顺序:posts.created\u at DESC
顺序('users.updated\u at DESC')

在我看来,我正在做:

@users.each do| user|
post=user.posts.first
结束

它不能正常工作。如何解决此问题而不出现N+1问题?

如果

 Post.first(:order => 'created_at DESC')

不起作用(或者您对最新更新的内容感兴趣)某处有东西坏了…

如果是增量的,您可以按
id
排序:

scope :latest, -> { order('id DESC') }
Post.latest.first 
Post.latest.limit(10)

关系数据库的另一个好处是已经有了id上的索引。

出于某种原因,默认范围中的order子句正在被覆盖

您可以通过以下方式强制订购:

在命名范围中使用它:

class Post < ActiveRecord::Base
  scope :latest, -> { reorder(created_at: :desc).first }
end
你可以简单地写:

@posts = Post.includes(:user).group('posts.user_id')
您将获得最新的帖子(每个用户一篇)

如果某些帖子没有用户:

@posts = Post.joins(:user).select('posts.*, users.username AS user_username, etc........').group('posts.user_id')
@posts
的每一篇文章都将获得一个
user\u username
方法,而不会出现n+1问题。当然,您可以根据需要定义更多自定义方法。

它应该是:

Post.order('created_at DESC').first

将重新排序以创建附加查询。因为代码是为每个有
许多帖子的用户迭代的,我正试图找到每个用户最新的帖子。我已经完成了
includes(:Posts)
那么您应该在
Posts
表中使用
连接
而不是
includes
和order子句。类似于
User.order('posts.created_at DESC')。连接(:posts)
。请随时在您的问题中提供更多详细信息。
@posts=Post.includes(:user).group(:user\u id)
不起作用:
PGError:ERROR:column reference“user\u id”不明确
。我正在使用Postgres,并且在ideas中有一个用户id列table@pratskitry
@posts=Post.includes(:user).group('posts.user_id')
Nope
列“posts.id”必须出现在group BY子句中或在聚合函数中使用。我想我在某个地方读到了你能读到的东西;t在同一查询中不使用组和顺序。由于order_by是默认范围,group_by在Postgres中不起作用。这是真的吗?
@posts = Post.joins(:user).select('posts.*, users.username AS user_username, etc........').group('posts.user_id')
Post.order('created_at DESC').first