2011-09-27 59 views
3

我有以下類在單元測試中正常工作,但我覺得它可能更簡單。使用ActiveRecord的範圍指令返回單個結果

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 

我試圖追加.firstlambda條款,但會導致一個錯誤。

我如何告訴scope我只想要第一個結果,從而完全消除方法current_license

回答

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

+0

:-)良好的作品,更簡單。一個問題是,那裏需要的「自我」,還是隻是一種風格的東西? –

+0

自我需要,因爲這是一種班級方法。 – Geo

+0

真的嗎?我以前沒見過。 –