前提・実現したいこと
ruby on rails でウィザード形式のユーザー登録を実装しようと思っています。
deviseを使用し、個人情報入力をadmin、住所入力をaddressとして保存させたいです。
発生している問題・エラーメッセージ
NoMethodError in Admins::Registrations#create undefined method `address_admins_path' for #<#<Class:0x00007fb52aab8560>:0x00007fb52aaca148> Did you mean? addresses_path <%= form_with model: @address, class: 'registration-main', local: true do |f| %> 個人情報を入力し、住所情報入力画面に遷移した時点で起きるエラーです。
該当のソースコード
class Admins::RegistrationsController < Devise::RegistrationsController def new @admin = Admin.new end # POST /resource def create @admin = Admin.new(sign_up_params) unless @admin.valid? render :new and return end session["devise.regist_data"] = {admin: @admin.attributes} session["devise.regist_data"][:admin]["password"] = params[:admin][:password] @address = @admin.build_address_admin render :new_address end def create_address @admin = Admin.new(session["devise.regist_data"]["admin"]) @address = AddressAdmin.new(address_params) unless @address.valid? render :new_address and return end @admin.build_address(@address.attributes) @admin.save session["devise.regist_data"]["admin"].clear sign_in(:admin, @admin) end private def address_params params.require(:address_admin).permit(:postal_code, :area, :city, :block_number, :phone_number, :house_number) end ____________________________________________________ Rails.application.routes.draw do devise_for :admins, controllers: { sessions: 'admins/sessions', passwords: 'admins/passwords', registrations: 'admins/registrations' } devise_scope :admin do get 'addresses', to: 'admins/registrations#new_address' post 'addresses', to: 'admins/registrations#create_address' end __________________________________________________ class AddressAdmin < ApplicationRecord belongs_to :admin, optional: true with_options presence: true do validates :postal_code, format:{with: /\A\d{3}[-]\d{4}\z/} validates :area validates :city validates :block_number validates :phone_number, format:{with:/\A\d{11}\z/} end end __________________________________________________ class Admin < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_one :address_admin # has_many :items with_options presence: true do validates :password, format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{6,100}+\z/i } validates :nickname validates :family_name validates :first_name validates :family_n_k validates :first_n_k end with_options format: { with: /\A[ァ-ヶー-]+\z/ } do validates :first_n_k validates :family_n_k end with_options format: { with: /\A[ぁ-んァ-ン一-龥]/ } do validates :family_name validates :first_name end end
試したこと
Completed 500 Internal Server Error in 2655ms
というエラー文がターミナルにあったのでルーティングを確認するためにadminをuser、address_adminをaddressに書き換えると、正常に動きました。
またbinding.pryでデータが送られていることも確認済みです。
パスのエラーということなので、rails routesでルート確認もしましたが、address_admins_pathというパスは指定していませんでした。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
devise
ruby on rails
あなたの回答
tips
プレビュー