LoginSignup
14
23

More than 3 years have passed since last update.

namespace / 指定ディレクトリ以下にコントローラーを作成

Last updated at Posted at 2019-07-04

概要

コントローラーやビューを生成する時、
それぞれ同じ名前になってしまうコントローラー名やビューの名前がある。
例えば、user photographer admin ぜんぶContacts.controller(お問い合わせ用)を持っています。

そこでディレクトリを指定してコントローラーを生成してあげたら、
adminsディレクトリ下にあるものはadmins/contactsというURLとして呼び出してくれると思ったわけですが・・

ここでルーティング内の重複はどうなるんだ〜となりました。
そこでnamespace(名前空間)という便利なものを知ったのでメモします:sunny:

Namespace(名前空間)とは

名前の重複があるときに、衝突を防ぐために使用します。

前提

今回はgem deviseでログイン機能を実装したため、
すでに$rails g devise:controllers adminsコマンドでadminsディレクトリがあります。
そこにdevise関連ではないコントローラーも追加していきたい!という感じ。

とりあえずコントローラーを生成してみよう

rails generate controller admins/Contacts edit update

これだけ:relieved::v_tone4:

ルーティングは?

上のコマンドでコントローラーを生成した時点で、
namespace :admins do --- endという枠組みが作成されて、
namespace枠内に、GETやPOSTなど自分が追加したアクションがきちんとルーティングされています:clap_tone3: 今回はResourcesに書き換えました。

config/routes.rb

Rails.application.routes.draw do

  namespace :admins do
    resources :contacts, only:[:edit, :update]
  end
  # アドミンのcontacts

  resources :contacts, only:[:new, :create]
  # ユーザーのcontacts

  devise_for :photographers
  devise_for :admins
  devise_for :users

end

これで名前が一緒でも、
「このcontactsはadminね。」 「このcontactsはuserね。」という感じで
判別してくれるわけです :relaxed: :fist_tone3:

14
23
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
14
23