LoginSignup
1
3

More than 3 years have passed since last update.

railsでurlを変更する方法

Last updated at Posted at 2019-08-23

自分が、忘れないに為に、これから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

自分はこれでいけました。

参考資料

Rails で投稿のURLをランダムな文字列にする

1
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3