LoginSignup
5
4

More than 5 years have passed since last update.

namespaceでURLを整える

Posted at

namespaceを利用するメリット

URLを直感的にできる

例えば、自分がいいねしてるユーザー一覧を見せる画面を作るとします。
簡単に作るとするならば、user_controllerにlikingメソッドを作ったりしますが、そうするとできるURlは以下になります。

#ターミナル
 liking_users GET    /users/liking(.:format)  users#liking

ちなみにコードはこんな感じですかね。

routes.rb
Rails.application.routes.draw do
 resources :users do
    collection do
      get :liking
    end
  end

ただこのコードだとURL内にあるusersって誰やねんとなるので、自分はいつもnamespaceを使ってURLを書き換えています。

routes.rb
namespace :my do
    get '/liking', :to => "likes#liking"
end

こうすると、生成されるURLが下記のようになります。

#ターミナル
 my_liking GET    /my/liking(.:format)          my/likes#liking

自分のというのをmyで表しており、直感的なURL(自分がいいねしているユーザーを表しているページ、ということがわかりやすい)になります。

URLをグループ化できるので、メンテナンスがしやすい

実際にユーザーが利用する画面と、管理者側で画面を分けたい時などにも使えます。

routes.rb
namespace :admin do
  resources :users 
end

scope module: :public do
  resources :users 
end

上記のようにすれば、管理者側でコントロールできるユーザー一覧ページと公開されているユーザーページを分けることができます。

namespaceの使い方

では実際の使い方です。

routes.rb内は上にも書いてありますが、もう一度。。。。。

routes.rb
Rails.application.routes.draw do

  namespace :my do
    get '/liking', :to => "likes#liking"
  end

end

namespace グループ化したいディレクトリ名 do
 httpメソッド 実際の表記されるURL, :to => "コントローラー名#アクション名"
end

注意点としては、フォルダの構成もURLに合わせて変えていかないとダメです。

上に書いてあるURLですが、

my_liking GET    /my/liking(.:format)          my/likes#liking

右のController#Actionにmy/というものがついています。
これはmyディレクトリ以下にある、likesコントローラーを実行するということになります。
なので、likesコントローラーを作成するタイミングで、myファイルの下を指定する必要があります。

ちなみにそのやり方は。。。。。

rails g controller my::likes

#=> create  app/controllers/my/likes_controller.rb

となります。

5
4
0

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
5
4