質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1510閲覧

ストロングパラメータのpermitの部分でNoMethodErrorが発生しており、原因解決策がわからない状態です。

Katie_

総合スコア1

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/20 13:33

前提・実現したいこと

Ruby on Railsで簡単なサイトを作成中で、会員の住所などをの情報を会員テーブルとは別に、Addressテーブルに登録できるようにしたいです。

NoMethodError (undefined method `permit' for "フォーム入力値":String):
のエラーが発生しており原因が分からないため、ご教授いただきたいです。

発生している問題・エラーメッセージ

NoMethodError (undefined method `permit' for "フォーム入力値":String): app/controllers/customers/addresses_controller.rb:22:in `address_params' app/controllers/customers/addresses_controller.rb:6:in `create'

該当のソースコード

AddressesController

1def create 2 @address = Address.new(address_params) 3 @address.save 4 rediect_to addresses_path 5 end 6 7private 8def address_params 9 params.require(:address).permit(:name, :post_code, :address) 10end

index.html.erb

1<div> 2 <div> 3 <h3>配送先</h3> 4 <%= form_with(model: @address, url: addresses_path(@address)) do |f| %> 5 <div class="field"> 6 <%= f.label :郵便番号 %> 7 <br> 8 <%= f.text_field :post_code %> 9 </div> 10 11 <br> 12 13 <div class="field"> 14 <%= f.label :住所 %> 15 <br> 16 <%= f.text_field :address %> 17 </div> 18 19 <br> 20 21 <div class="field"> 22 <%= f.label :名前 %> 23 <br> 24 <%= f.text_field :name %> 25 </div> 26 27 <br> 28 29 <div class="actions"> 30 <%= f.submit '登録する' %> 31 </div> 32 <% end %> 33 </div> 34</div> 35

schema.rb

1create_table "addresses", force: :cascade do |t| 2 t.integer "customer_id", null: false 3 t.string "name", null: false 4 t.string "post_code", null: false 5 t.string "address", null: false 6 t.datetime "created_at", null: false 7 t.datetime "updated_at", null: false 8 end

routes.rb

1scope module: :customers do 2 resources :addresses, except: [:new, :show] 3end

試したこと

カラム名が誤っているのかと考え確認しましたが、特に問題はなさそうでした。
スペリングミスも確認しましたが、問題はありませんでした。

補足情報(FW/ツールのバージョンなど)

Rails -v 5.2.4.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

paramsの中身の掲載がないので、恐らくになります。
間違っていたらすいません。

これは、コントローラーまでデータは飛んでるように思いますので、
params、もしくはparams.require(:address)に問題があるのでは?
恐らく後者かと感じます。
一度、binding.pryなどで、paramsの中をご確認下さい。

また、このエラーが解消しても、@address.saveでエラーが出るかもしれません。
customer_idが無いからです。

如何でしょうか?

投稿2020/11/20 14:46

tomtomtomtom

総合スコア563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Katie_

2020/11/21 10:15

ご回答ありがとうございます。 indexにフォームを配置していたのですが、indexアクションに@address = Address.newを記載できていませんでした。 またアドバイスいただいたように、customer_idが空でしたので、ログインユーザーのidを渡すように記述を追加したところ、無事に住所が保存できるようになりました。 ありがとうございました。
tomtomtomtom

2020/11/21 17:05

無事解決できてよかったです。 こちらもホッとしました。 また機会がありましたらよろしくおねがいします^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問