【Rails】URL Parameterにid以外を利用する
/users/:id
の:id
をnameとかでアクセスできた方がかっこいい.
こんなときはFriendlyIdというgemを利用する.
別にgemなしでも容易に実装可能ではあるが,gemを利用すると何をしたいかが明確になり実装がスマートになる(Model中のコードは2行ほど)ので積極的に利用していきたい.
# Gemfile gem 'friendly_id'
以下はname
columnを持つUser
Modelがすでに存在する場合.
$ bin/rails g friendly_id $ bin/rails g migration add_slug_to_user slug:string:uniq $ bin/rake db:migrate
# app/models/user.rb class User < ActiveRecord::Base extend FriendlyId friendly_id :name, use: :slugged end
Controllerでfindしてるところを以下のように書き換え.
User.friendly.find(params[:id])
slug
にURLに利用される名称が格納される(おそらくbefore_validation
時).
既存レコードに適用したい場合はUser.find_each(&:save)
とかやってみればいい気がする.
/users/:id
じゃなくて/:id
にしたい時とかはユーザ名のblack listを忘れずに.