【发布时间】:2016-04-05 19:15:40
【问题描述】:
例如,如果我想使用@posts.all 提取所有@posts,但我不想包含其中的最后一条或最新记录?
这就是我想要做的,
@posts = Post.all(没有创建的最新记录。)
基本上所有记录,但不是最后一条记录。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord
例如,如果我想使用@posts.all 提取所有@posts,但我不想包含其中的最后一条或最新记录?
这就是我想要做的,
@posts = Post.all(没有创建的最新记录。)
基本上所有记录,但不是最后一条记录。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord
我认为尝试生成排除最后一个元素的 SQL 查询是不值得的。尤其是子查询可能比仅将所有记录加载到 Array 和排除最后一条记录要慢:
@posts = Post.all[0..-2]
您在 cmets 中的另一个示例如下所示:
@contact_prices = @contact.retail_prices.all.order("created_at DESC").load[0..-2]
另一个选项(取决于您的关系顺序)可能是使用offset:
@contact_prices = @contact.retail_prices.order("created_at DESC").offset(1)
【讨论】:
Relation 而不是 Array。
[1..@contact.retail_prices.count] 会跳过第一个。比只使用offset(1) 可能更好
这是我认为做你想做的事情的最直接的方式:
Post.limit(Post.count - 1)
如果您希望您的查询允许分页或其他 LIMIT 查询,您可以尝试类似
Post.where("id < ?", Post.last.id)
【讨论】:
很多答案都可以解决问题,但会抛出一个额外的选项:
@posts = Post.where("id != ?", Post.last.id)
【讨论】:
单行增强现实:
Post.where.not(id: Post.last&.id)
【讨论】: