Augmented Usamimi

it { is_expected.to be_blog.written_by(izumin5210) }

【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を忘れずに.