0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Railsのdeviseで新規登録の際に親テーブルの外部キーをパラメーターに渡す

Last updated at Posted at 2022-08-08

実装背景

deviseを使ったユーザー管理を実装していますが、パラメーターに親テーブルのidを渡してユーザー新規登録を実装する必要がありました。
具体的には下記のようなURLで新規登録画面を開くことを目標とします。

/admin_groups/:admin_group_id/admin_users/sign_up

該当DB

管理会社テーブル

admin_groups
name

管理者テーブル

admin_users
name
email
password
admin_group_id

新規登録フロー

参考までに今回実装予定の新規登録フローを紹介します。

  1. 既に登録されているユーザーがログインする。
  2. 新規ユーザー招待画面で招待したいユーザーのメールアドレスを入力、送信
  3. 届くメール本文には、自動で新規登録画面のURLが記載されている。
  4. URLのパラメータにはログインユーザーのデータに入っているadmin_group_idが自動で入り、同じ管理会社の所属になる。

ルーティングを設定

routes.rb
  devise_for :admin_users, skip: :all #'registrations'
  devise_scope :admin_user do
    get '/admin_groups/:admin_group_id/admin_users/sign_up', to: 'admin_users/registrations#new', as: 'admin_user_registration'
  end

1行目でadmin_usersをマッピングしています。2行目以下でregistrationsコントローラーの記述がありますので、registrationsはskipさせます。
この1行がないと、devise_mapping.validatable?の箇所でNoMethodError in Admin_Users::RegistrationsController#newエラーが出ます

2〜4行目で/admin_groups/:admin_group_id/admin_user/sign_upへアクセスされたときのコントローラーとアクションを指定します。
devise_scopeの後のadmin_userは単数系です。
複数形にすると、同様にエラーになります。

あとがき

新規登録に関してはこれでルーティングができました。
ログインに関しては親テーブル関係なく、admin_users/sign_inで行いたいので下記に手順を書きました。
Railsのdeviseで新規登録画面URLは親テーブルのidを渡し、ログインURLには渡さない

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?