ルーティングルールのresourcesやmemberなどでURLに:idを伴うときに、多くの場合PrimaryKeyを使ってしまいがちですが、将来、要望として任意の文字列で代用したい。なんてことが考えられるので、簡単に修正ができるように備えておきます。
URLに:idを含むとき。
Request: http://APP_URL/users/:id
単純なコントローラ処理の例。
users_controller.rb
class UsersController < ApplicationController
def show
user = User.find_by_id(params[:id])
...
end
end
将来に備えた例。
users_controller.rb
class UsersController < ApplicationController
def show
user = User.key(params[:id]).first
...
end
...
end
user.rb
class User < ActiveRecord::Base
...
scope :key, lambda { |key| where(id: key) }
...
end
scopeなどで抽象化しておけば、usernameでアクセスしたくなったときなどにscopeを変更するだけで対応できます。
user.rb
scope :key, lambda { |key| where(username: key) }
応用が効くので、将来変更するかな?ってときには使っておくといいかもしれません。