ActiveRecord on Rails 3 でクエリを動的に組み立てる (Lazy Loading)

Lazy Loading

これで良いのかどうか、、まだ冗長に思えるのでもっと良い他の道があるのかも。

    query = Entry.recent
    query = query.ranged params if params[:year]
    @entries = query.paginate :page=>params[:page] || 1, :per_page=>Entry.per_page

query interface や scope の戻り値は ActiveRecrod::Relation または ActiveRecord::NamedScope のインスタンスなので chain 出来る。
詳しくは http://asciicasts.com/episodes/202-active-record-queries-in-rails-3


query = query が冗長だ。

  @entries = (Entry.query do
    recent
    ranged(params) if params[:year]
  end).paginate ..

とかありそうな気がする。
若しくは条件付きチェインやコードブロックを上手く使うとか。

fetch

.to_sqlデバッグに便利。

発火させるには .first, .last, .all 辺り。

.each でも発火する。

Entry.recent.each {|e| puts e.title }

レコードが1件に特定出来ていることを保証するメソッドが欲しかったが発見出来なかった。
検査のための one? はある。