2

私はBeginningRails3を読んでいます。この本は、ユーザーが記事を投稿できるプロジェクトを作成します。これで、Articleオブジェクト内に、次のような3つのスコープが作成されます。

scope :published, where("articles.published_at IS NOT NULL")
scope :draft, where("articles.published_at IS NULL")
scope :recent, lambda { published.where("articles.published_at > ?", 1.week.ago.to_date)}

これで、最後の関数をこのステートメントにlambda置き換えることができ、同じ結果が得られます。scope

scope :recent, where("published_at > ?", 1.week.ago.to_date)

ここでラムダを使用する利点は何ですか?

4

1 に答える 1

10

使用しない場合lambda、時間1.week.agoはアプリケーションの起動時に計算され、キャッシュされます。そのため、アプリケーションが実行されてから数か月が経過した場合でも、アプリケーションが開始される1週間前の時点になります。

アプリケーションコードはリクエストごとにリロードされるため、開発環境ではこれに気付かないでしょう。ラムダを使用すると、実稼働環境であっても、スコープへの呼び出しごとにラムダが新しく計算されるようになります。

于 2012-07-08T17:21:35.483 に答える