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