LoginSignup
3
4

More than 5 years have passed since last update.

Rails4 | 新規・変更機能 | NullRelationの追加

Posted at

Rails4 | 新規・変更機能 | NullRelationの追加

概要

Rails4では ActiveRecord に NullRelation が追加された。
任意の条件の時だけ空の結果を返したい場合など、通常の結果が返却された場合と同様に
メソッドチェインを利用できる。(最終的には空値が返却される)
いわゆる、 Null Object Pattern

none を利用した際は、SQLが発行されないためパフォーマンスの意味でも好ましいです。

サンプル

仕様

  • 下記で scaffold した状態をベースとする
rails g scaffold person name:string age:integer
rake db:migrate
  • index へのリクエスト時に Query String に disable キーがあれば none を。なければ all を返却する。
  • Personname には敬称 san を付与する。

サンプルコード

  • scaffold した状態の PeopleControllerindex メソッドを下記のように変更します
  def index
    @people = params['disable'] ? Person.none : Person.all
    logger.info "params['disable'] = #{!!params['disable']}"
    logger.info "@people = #{@people.class}"
    @people = @people.map { |person| person['name'] += ' san';person }
  end

all 呼び出し時

ログは以下のようになります

params['disable'] = false
@person = Person::ActiveRecord_Relation
  Person Load (0.6ms)  SELECT  "people".* FROM "people"   ORDER BY "people"."id" ASC LIMIT 1

画面には以下のようなレコードが表示されます

tanaka san  24  Show  Edit  Destroy
suzuki san  25  Show  Edit  Destroy

none 呼び出し時

ログは以下のようになります。

params['disable'] = true
@people = Person::ActiveRecord_Relation

SQLを実行していないため、SQLのログが出力されていません。

画面にはレコードが表示されません。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4