カテゴリー:
Rails
タグ:
 Rails ActiveRecord to_partial_path

このエントリーをはてなブックマークに追加
更新日時:
2016年12月26日(月)
作成日時:
2016年12月26日(月)

前の記事 / 次の記事

今更to_partial_pathの存在に気付いたのでメモ。

参考

ActiveRecordのインスタンスには to_partial_path というメソッドがある。
読んで字の如くそのインスタンスをレンダリングするためのパーシャルの在処を得ることができる。

例えば、

class User < ApplicationRecord
end

User.new.to_partial_path
#=> "users/user"

このメソッドをオーバーライドすることで文脈に応じてパーシャルを使い分けることができる。
それで一体何のメリットがあるのかというと、つまり次のような分岐処理を書くことなく、

- @users.each do |user|
  - if user.admin?
    = render "users/admin_user"
  - elsif user.guest?
    = render "users/guest_user"
  - else
    = render "users/user"

Userのコレクションをレンダリングする時は常に

= render @users

と書けるようになる。

例えば次のようにオーバーライドする。

class User < ApplicationRecord
  def to_partial_path
    if user.admin?
      "users/admin_user"
    elsif user.guest?
      "users/guest_user"
    else
      "users/user"
    end
  end
end