ヨージとプログラミング

プログラミング勉強の記録

【Rails5】devsieのルーティング方法覚書

追記したいコントローラーをルートに書く必要あり

Rails.application.routes.draw do
  root to: 'igposts#index'
  devise_for :users, skip: [:sessions, :registrations, :signups], controllers: {
    # 編集するコントローラーを以下に記載
    omniauth_callbacks: 'users/omniauth_callbacks'
  }
〜

上記のcontrollers: [〜以下の部分です。deviseには既存の処理が定義されており、そのファイル自体を直接編集することはできません(多分)
そこで、下位のコントローラーで追記するわけですが、それらのコントローラー群は自動生成されていますね。
しかし全部使うことはほぼ無いでしょう。使うときは、上記のように登録しておく必要があります。

devise_forとdevise_scpeの違い

devise_for :users, skip: [:sessions, :registrations, :signups], controllers: {
〜

devise_forですが、これはdeviseを使う上での基本的なルーティングセットのようです。内部的には名前空間を生成してるようなので必要です。
一方でdevise_scopeは以下のように用います。一例ですが

devise_scope :user do
  get "signup", to: "users/registrations#new", as: :new_user_registration
  post "signup", to: "users/registrations#create", as: :user_registration
  get "users/edit", to: "users/registrations#edit", as: :edit_user_registration

devise_forの変更したい部分(パス、コントローラーなど)を記載する感じのようです。ただ、名前付きルートの方が変更になってしまうと色々エラーが起こってしまったので、as:〜でもともとの名前付きルートに固定したほうがいいかもしれません。