LoginSignup
0
1

More than 1 year has passed since last update.

Railsのdeviseで新規登録画面URLは親テーブルのidを渡し、ログインURLには渡さない

Posted at

背景

deivseを使ってユーザー管理をしています。
今回新規登録時には親テーブルのidをパラメータに渡し、ログイン画面では渡さない、というルーティングを実装しました。

バージョン

Ruby3.1.2
Rails7.0.3

sign_upのルーティング

sign_upは下記の記事に書きました。
Railsのdeviseで新規登録の際に親テーブルの外部キーをパラメーターに渡す

sign_inのルーティングを追加

routes.rb
  devise_for :admin_users, skip: :all
  devise_scope :admin_user do
    get '/admin_groups/:admin_group_id/admin_users/sign_up', to: 'admin_users/registrations#new', as: 'admin_user_registration'
    get '/admin_users/sign_in', to: 'admin_users/sessions#new', as: 'admin_user_session' #追記
    get '/admin_users/password', to: 'admin_users/passwords#new', as: 'admin_user_password' #追記
  end

_links.html.erbを修正

ここまでで、/admin_groups/:admin_group_id/admin_users/sign_upや/admin_users/sign_inにアクセスするとadmin_users/shared/_links.html.erbでNoMethodErrorが出ると思います。
そこで、下記の通り修正

_links.html.erb
<%- if controller_name != 'sessions' %>
  <%= link_to "Log in", merchant_manager_session_path(resource_name) %><br />
<% end %>

<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
  <%= link_to "Sign up", merchant_manager_registration_path(resource_name) %><br />
<% end %>

<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
  <%= link_to "Forgot your password?", merchant_manager_password_path(resource_name) %><br />
<% end %>

これでパスが正しく通り、ビューが表示されると思います。

あとがき

deviseのカスタマイズはやはり難しい。
結構後先考えずに書いていったので後々不都合が生じるかもしれませんが、その都度記事を書いて行きます。
現時点でおかしいところがあれば教えていただけると幸いです。

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