カテゴリー:
Rails
タグ:
 Rails routes to_param

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

前の記事 / 次の記事

例えば、

user_path @user
#=> /users/1

ではなくて

user_path @user
#=> /users/scott

としたい時。to_param メソッドを使うことで簡単に実現できる。
URLヘルパーでパスを生成する時、オブジェクトが渡された時は
to_param を参照しにいくことになっているので、これをオーバーライドすればよい。
デフォルトでは id が返される。

class User < ActiveRecord::Base
  def to_param
    name
  end
end

また、to_param メソッドをオーバーライドしたからといって、

User.find "scott"

ができるほど便利にはつくられていないので、コントローラーなどで
User を find しているヶ所があればそのヶ所を修正する。

こういうのを

def set_user
  @user = User.find params[:id]
end

こうする

def set_user
  @user = User.find_by! name: params[:id]
end

find_by! ではなく find_by にするとDBに存在しない時エラーにならないので注意。