Rails を使用したアジャイル Web 開発の本から
class Order < ActiveRecord::Base
named_scope :last_n_days, lambda { |days| {:conditions =>
['updated < ?' , days] } }
named_scope :checks, :conditions => {:pay_type => :check}
end
ステートメント
orders = Orders.checks.last_n_days(7)
データベースへのクエリは 1 つだけになります。
レールはこれをどのように実装しますか? 私はRubyが初めてで、これを可能にする特別な構造があるかどうか疑問に思っています。
そのようなメソッドを連鎖できるようにするには、named_scope によって生成された関数がそれ自体を返すか、さらにスコープを設定できるオブジェクトを返す必要があります。しかし、Ruby はこれが最後の関数呼び出しであり、今すぐデータベースにクエリを実行する必要があることをどうやって知るのでしょうか?
上記のステートメントは実際にデータベースにクエリを実行し、チェーンの結果として SQL ステートメントを返すだけではないため、これを尋ねます。