2012-03-09 13 views
2

スコープに引数を渡す必要があるため、クラスメソッドスコープを使用し始めました。 Railsのガイドの例撮影: Rails:nil引数を処理するクラスメソッドスコープを作成する方法

def self.1_week_before(time) 
    where("created_at < ?", time) 
    end 

は、しかし、私のサイトで時々引数がnilできるが、その場合には、私はスコープというバイパスして、チェーン内の次のスコープに行きたいです。

私はこの方法であれば条件を追加しました:

def self.1_week_before(time) 
    if time 
     where("created_at < ?", time) 
    end 
    end 

私が連鎖するスコープの途中でこのメソッドを使用する場合しかし、それはゼロのため、未定義のメソッドを提供します:NilClassエラー。これをどうすれば解決できますか?

答えて

4

これはnilを返しますので、あなたがチェーンたときにエラーが発生します。

def self.1_week_before(time) 
    if time 
    where("created_at < ?", time) 
    end 
end 

はこれを防ぐためにあなたがscopedを返すことができます:(

def self.1_week_before(time) 
    if time 
    where("created_at < ?", time) 
    else 
    scoped 
    end 
end 
+1

私はここで見つけるhttp://stackoverflow.com/questions/3735838/empty-scope-with-ruby-on-rails) 'scoped'は' all'よりも優れているはずです。あなたはそれを変更することができます、私はそれを受け入れるでしょう。 – lulalala

+0

それを指摘してくれてありがとう...私は自分自身で何かを学んだ:-) – Mischa

関連する問題