使用ActiveRecord的范围指令返回单个结果

时间:2011-09-27 10:01:03

标签: ruby activerecord scope simplification

我有以下类在我的单元测试中工作正常,但我觉得它可以更简单。

class License < ActiveRecord::Base
  scope :active, lambda {
    where("active_from <= ?", Date.today).order("version_number DESC")
  }
end

def current_license
  return License.active.first
end

public :current_license

我尝试将.first附加到lambda子句中,但这会导致错误。

如何告诉scope我只想要第一个结果,从而彻底消除方法current_license

1 个答案:

答案 0 :(得分:2)

让它成为一种方法,你可以得到这个:

class License < ActiveRecord::Base

  def self.current_license
    return License.where("active_from <= ?", Date.today).order("version_number DESC").first
  end

end

关于结果数量,请尝试添加.limit(1)。有关详细信息,请查看here