Menu

Category

Archive

logo


Rails の show で id の代わりに文字列を使用する

2014-09-01 23:00:00 +0900
  • このエントリーをはてなブックマークに追加

RailsのRESTfulなインターフェイスにおいて、showアクションは、例えば /lessons/1 のように /models/:id となっています。基本はこれで良いと思いますが、単調な数字の id ではなく、各モデルが持っているユニークなユーザー名(文字列)等を使いたい場合の処理。

to_param メソッド

to_params メソッドを使用するだけです。

1 # In your model class, 
2 def to_param
3   uniq_user_name # string
4 end

この to_param メソッドによりActiveRecordが使用するID(アイデンティファー)を定義します。デフォルトは、idです。これをモデルの他のアトリビュートにすることにより、ActiveRecordが使用するIDを変更することができます。

この処理により、

1 <%= link_to(@lesson) do %>
2   html-code-here
3 <% end %>

で生成されるURLは、/lessons/id ではなく、/lessons/uniq_user_name となります。

また、showアクションでは、

1 def show
2   # Parameters: {"id"=>"karate_edogawa"}
3   # Uniq string identifer is put on the parameters,
4   # id usually has just integer.
5   @lesson = Lesson.find_by(:uniq_user_name => params[:id])
6 end

のようにパラメータに変化があります。

参考

Rails route to username instead of id