

# 解決したいこと

gem deviseを使用してユーザー情報登録機能を作成しています。

html.hamlの中でf.text_field :addressを記述していますが、  
入力後データを保存しようとすると以下のエラーが出ます。

**エラーメッセージ**

[code]

    NoMethodError in Users::RegistrationsController#create_address
    undefined method `permit' for "[入力した内容]":String
    
[/code]

* * *

user/registrations_controller.rb

[code]

    def new
      @user = User.new
    end
    
    def create
      @user = User.new(sign_up_params)
      if @user.valid?
        session["devise.regist_data"] = {user: @user.attributes}
        session["devise.regist_data"][:user]["password"] = params[:user][:password]
        redirect_to addresses_path
      else
        render :new
      end
    end
    
    def create_address
      @user = User.new(session["devise.regist_data"]["user"])
      @address = Address.new(address_params)
      if @address.valid?
        @user.save
        @address = Address.new(address_params.merge(user_id: @user.id))
        @address.save
        session["devise.regist_data"]["user"].clear
        sign_in(:user, @user)
      else
        render :new_address
      end
    end
    
    protected
    
    def address_params
      params.require(:address).permit(:post_number, :prefecture, :city, :address, :apartment)
    end
    
[/code]

routes.rb

[code]

     devise_for :users, controllers: {
        registrations: 'users/registrations',
      }
    
      devise_scope :user do
        get  'addresses', to: 'users/registrations#new_address'
        post 'addresses', to: 'users/registrations#create_address'
      end
    
[/code]

db/migrate/addresses.rb

[code]

    t.string     :address    , null: false
    
[/code]

`rails routes`

[code]

            user_registration PATCH  /users(.:format)                                                                         users/registrations#update
                              PUT    /users(.:format)                                                                         users/registrations#update
                              DELETE /users(.:format)                                                                         users/registrations#destroy
                              POST   /users(.:format)                                                                         users/registrations#create
                    addresses GET    /addresses(.:format)                                                                     users/registrations#new_address
                              POST   /addresses(.:format)                                                                     users/registrations#create_address
                         root GET    /                                                                                        items#index
                         user GET    /users/:id(.:format)                                                                     users#show
    
[/code]


CC BY-SA 4.0
2020-06-20T06:11:30.017
67825
2021-10-11T12:07:40.627
2020-06-20T07:58:38.990
3060
39989
question
ruby-on-rails
undefined method `permit' for "":String エラーが出ます


「undefined method `permit'」（[直訳] permitというメソッドは定義されていません）というのがエラーの内容です。

確かに、質問に含まれているプログラムには、permitというメソッドの定義が含まれていません。

問題は  
・permitというメソッドを定義するのを忘れている。  
・permitというメソッドを持つオブジェクトのつもりで、String型のオブジェクトを使っている。  
というような、思い違いによって起きているのではないかと思われます。

paramsのように、宣言されていない変数がプログラムで使われているといった正しくないコーディングが影響している可能性もあろうかと思われます。

質問に書かれていないプログラムを使っているのであれば、それらを全て質問に追加して下さい。  
プログラムの断片（不完全な一部分）だけを示されても、その修正方法を推測することは無理です。


CC BY-SA 4.0
2020-06-20T06:41:09.807
67826
2020-06-20T06:41:09.807
217
67825
answer