friendly idを利用したURI設計
プロジェクトでSEO対策と数値を含めずにURIを設計するため、friendly_idを採用してURIの再設計をしました。
railsではURIにmodelの主キーを含める形の設計が主になりますが、数値では分かりづらくなります。(resourceでは作成されませんが)
それほど複雑な仕様でもないため、gemを使わず、参照しているmodelのnameカラムがありましたので英語名を追加することで実現しました。
サンプルコードは、実際に実装したコードとは異なります。
環境
Rails appの作成
# rails new friendly_app # cd friendly_app # ./bin/rails g scaffold users name_en:string # ./bin/rails db:migrate
実装
app/models/user.rb
に、id
ではなくname_en
を利用するように書き換える。
# app/models/user.rb モデルに'#to_param'を追記する。 class User < ApplicationRecord validates :canonical_name, uniqueness: { case_sensitive: false }, format: { with: /\A[A-Za-z][\w-]\z/ }, length: { minimum: 3, maximum: 25 } def to_param name_en ? name_en : id.to_s end def self.find(input) find_by(name_en: input) || super end end
rails s
app serverを起動して。
# ./bin/rails s
動作確認
users/new
でユーザを作成する。users/:name_en
に移動する。
まとめ
route.rbがresources
のままになっており
params[:id]でname_en
の値を受け渡すことになりわかりずらくなるので、idを受け渡さない画面ではroute.rbを変更しました。
参考URL
Friendly URLs in Rails · GitHub