自分が、忘れないに為に、これからqiitaに忘備録的な感じで、色々書いていこうと思います。
バージョンと使用
ruby 2.5.3
rails 5.2.3
AWS
まず最初の状態
railsで何かしらを作ると、デフォルトだと、
routes.rb
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
に変えたい」
という時です。
まず、
routes.rb
Rails.application.routes.draw do
resources :users, param: :name
end
次に、controllerの変更です。
:id
を使うのは, show, edit, update, destroyがありますが、
使うものは一緒なので、show以外は省略します、すみません。
controllerの変更はこんな感じです。
users_controller.rb
def
@user = User.find_by(name: params[:name])
end
この時、User.findではなく、User.find_by使用します。
findはidのみにしか使えないからです。
そんなこんなで、変更していくとusers/:name
が使えるようになると思います。
オプション
ただ、このままだと、users/:id
でも、users/:name
でも入れてしまいます。
なので自分は少しモデルに変更を加えました。
user.rb
def to_param
return self.name
end
自分はこれでいけました。