プロジェクトで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