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
2
3
4
# In your model class, 
def to_param
  uniq_user_name # string
end

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

この処理により、

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

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

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

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

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

参考

Rails route to username instead of id