Help us understand the problem. What is going on with this article?

namespaceでURLを整える

More than 1 year has passed since last update.

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

となります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした