自分が、忘れないに為に、これからqiitaに忘備録的な感じで、色々書いていこうと思います。
バージョンと使用
ruby 2.5.3
rails 5.2.3
AWS
まず最初の状態
railsで何かしらを作ると、デフォルトだと、
Rails.application.routes.draw do
resources :users
end
上記のようにすると、routesとして、
posts GET /posts(.:format)
POST /posts(.:format)
new_post GET /posts/new(.:format)
edit_post GET /posts/:id/edit(.:format)
post GET /posts/:id(.:format)
PATCH /posts/:id(.:format)
PUT /posts/:id(.:format)
DELETE /posts/:id(.:format)
が出てくると思います。
これの:idの部分を変更しようと思います。
変更の仕方
例えば、モデルを作成していたとして、そのモデルがnameカラムを持っていたとします。
そして、「今は/users/:idだけど、/users/:nameに変えたい」
という時です。
まず、
Rails.application.routes.draw do
resources :users, param: :name
end
次に、controllerの変更です。
:idを使うのは, show, edit, update, destroyがありますが、
使うものは一緒なので、show以外は省略します、すみません。
controllerの変更はこんな感じです。
def
@user = User.find_by(name: params[:name])
end
この時、User.findではなく、User.find_by使用します。
findはidのみにしか使えないからです。
そんなこんなで、変更していくとusers/:nameが使えるようになると思います。
オプション
ただ、このままだと、users/:idでも、users/:nameでも入れてしまいます。
なので自分は少しモデルに変更を加えました。
def to_param
return self.name
end
自分はこれでいけました。