通过链接范围查询有限的ActiveRecord :: Relation

时间:2015-02-26 23:04:49

标签: ruby-on-rails activerecord

有没有办法查询只是 ActiveRecord :: Relation中的记录,而不将其转换为数组?

limit ed关系上链接范围会产生奇怪的结果:

class Game < ActiveRecord::Base
  scope :recent, ->(number) { order('created_at DESC').limit(number) }
  scope :won_by, ->(player) { where(won_by: player) }
end

recent_games = Game.recent(10)

recent_games.won_by(player_one).size # 10
recent_games.won_by(player_two).size # 10

阻止limit影响后续查询的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用first(N)代替limit #my bad

<强>更新 抱歉答案,我以为我记得自己使用first链接范围,无论如何,限制确实有点过山车。规则是限制方法应始终链接到最后!我认为在这里使用范围recent时最好使用实例方法。

答案 1 :(得分:0)

目前的解决方案是使用where限制查询(并使用unscope摆脱不必要的限制):

recent_games = Game.recent(10)
recent_games = recent_games.where(id: recent_games).unscope(:limit)

但我想知道是否有更好的解决方案?