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

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

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

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

Q&A

解決済

1回答

722閲覧

Railsで文字情報を保存させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/18 20:52

前提・実現したいこと

Railsアプリで文字情報(アドレス)を保存させたいです。

commentモデルにname, commentにaddressカラムを追加して住所情報の保存を試みたのですが、保存できません(他情報は保存できています)。

該当のソースコード

(db/schema.rb) create_table "comments", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.bigint "post_id" t.string "name", null: false t.text "comment", null: false #今回追加 t.integer "user_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "address" t.index ["post_id"], name: "index_comments_on_post_id" end
(form.html.er) <%= form_for comment do |f| %> <%= f.hidden_field :post_id %> <div class="form-group"> <%= f.label :name, '名前' %> <%= f.text_field :name, class: 'form-control' %> <br/> <%= f.label :comment, 'コメント' %> <%= f.text_area :comment, class: 'form-control', rows: 4 %> <br/> <%= f.label :address, 'アドレス' %> <%= f.text_area :address, class: 'form-control', rows: 1 %> <br/> <%= f.submit '送信', class: 'btn btn-primary' %> </div> <% end %>
(comments_controller.rb) def create comment = Comment.new(comment_params) comment.address = params[:address] #有無で変化なし if comment.save flash[:notice] = 'Comment was posted' redirect_to posts_index_path(comment.post_id) else redirect_to posts_index_path(comment.post_id), flash: { comment: comment, error_messages: comment.errors.full_messages } end end

試したこと

ログを見るとアドレスの送信はできているのですが、受け取れていないように見えます。

 (2.2ms)  SET NAMES utf8 ,@@SESSION.sql_mode = CONCAT( CONCAT( @@sql_mode ,',STRICT_ALL_TABLES' ) ,',NO_AUTO_VALUE_ON_ZERO' ) ,@@SESSION.sql_auto_is_null = 0 ,@@SESSION.wait_timeout = 2147483 Comment Load (2.1ms)  SELECT `comments`. * FROM `comments` LIMIT 11 Started POST "/comments" for 172.25.0.1 at 2020-09-18 19:39:00 +0000 Cannot render console from 172.25.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255  (5.4ms)  SET NAMES utf8 ,@@SESSION.sql_mode = CONCAT( CONCAT( @@sql_mode ,',STRICT_ALL_TABLES' ) ,',NO_AUTO_VALUE_ON_ZERO' ) ,@@SESSION.sql_auto_is_null = 0 ,@@SESSION.wait_timeout = 2147483 ↳ /usr/local/bundle/gems/activerecord-5.2.4.3/lib/active_record/log_subscriber.rb:98 Processing by CommentsController#create as HTML Parameters: { "utf8" => "✓", "authenticity_token" => "QaAqb700dblcEHh48r974732MDyhAxuRUuoc1hhH4Q0zbtCoQCUIX0klFsk9ASePIAxAu1AE9T0A0zFpwmP+wA==", "comment" => { "post_id" => "1", "name" => "7", "comment" => "8", "address" => "new york" }, "commit" => "送信" } User Load (1.9ms)  SELECT `users`. * FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/controllers/application_controller.rb:6 Unpermitted parameter: :address  (1.0ms)  BEGIN ↳ app/controllers/comments_controller.rb:5 Post Load (0.8ms)  SELECT `posts`. * FROM `posts` WHERE `posts`.`id` = 1 LIMIT 1 ↳ app/controllers/comments_controller.rb:5 Comment Create (1.4ms)  INSERT INTO `comments` ( `post_id` ,`name` ,`comment` ,`user_id` ,`created_at` ,`updated_at` ) VALUES ( 1 ,'7' ,'8' ,1 ,'2020-09-18 19:39:06' ,'2020-09-18 19:39:06' ) ↳ app/controllers/comments_controller.rb:5  (5.8ms)  COMMIT ↳ app/controllers/comments_controller.rb:5 Redirected to http://localhost:3003/posts/index.1 Completed 302 Found in 384ms (ActiveRecord: 23.6ms)

おそらくcontrollerでの保存方法に問題がある気がしますが、解決方法がわかりません。
すみませんが、アドバイスよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

app/controllers/application_controller.rb:6 Unpermitted parameter: :address

とログ出力があります。

comment_paramsメソッドの permitaddress の追加を行いましょう。

どうしてもStrong Parameterを使いたくない場合は

ruby

1comment.address = params[:comments][:address]

でどうでしょうか。

投稿2020/09/18 21:50

mavis

総合スコア24

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

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

退会済みユーザー

退会済みユーザー

2020/09/18 23:08 編集

ご回答ありがとうございます。 comment_paramsで制限していたのを忘れてました。下記のように追加しました。 ``` def comment_params params.require(:comment).permit(:post_id, :name, :comment, :user_id, :address) end ``` ただ追加後も保存できない状態は続いており、ログではこうなってます。 ``` app/controllers/comments_controller.rb:5:in `create' Started POST "/comments" for 172.25.0.1 at 2020-09-18 22:38:56 +0000 Cannot render console from 172.25.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by CommentsController#create as HTML Parameters: { "utf8" => "✓", "authenticity_token" => "mYIGanDk/G9/I05C7OXC59z47uqEqxzUX1gha1aymtDQstXMBZlSAj4XpJY9RFS9taxGRD/757RlWnKiakz4Bw==", "comment" => { "post_id" => "1", "name" => "tt", "comment" => "gg", "address" => "tokyo" }, "commit" => "送信" } User Load (1.0ms)  SELECT `users`. * FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/controllers/application_controller.rb:6  (1.1ms)  BEGIN ↳ app/controllers/comments_controller.rb:6 Post Load (1.2ms)  SELECT `posts`. * FROM `posts` WHERE `posts`.`id` = 1 LIMIT 1 ↳ app/controllers/comments_controller.rb:6 Comment Create (1.9ms)  INSERT INTO `comments` ( `post_id` ,`name` ,`comment` ,`user_id` ,`created_at` ,`updated_at` ) VALUES ( 1 ,'tt' ,'gg' ,1 ,'2020-09-18 22:39:02' ,'2020-09-18 22:39:02' ) ↳ app/controllers/comments_controller.rb:6  (6.0ms)  COMMIT ↳ app/controllers/comments_controller.rb:6 Redirected to http://localhost:3003/posts/index.1 Completed 302 Found in 544ms (ActiveRecord: 26.1ms) ``` `comment.address = params[:comments][:address]` も試してみましたが、 ``` NoMethodError in CommentsController#create undefined method `[]' for nil:NilClass ``` のエラーとなってしまいました。。。
退会済みユーザー

退会済みユーザー

2020/09/19 18:49

rails db:migrate:reset でDBを設定し直したら動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問