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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

484閲覧

フォームで入力した内容をDBに保存したい。

milktea246

総合スコア23

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2022/05/10 01:31

前提

rails初学者です。
ペットの情報を登録する機能を作ろうと思い、フォームに必要な項目を入力し、登録するボタンを押しましたが、元の入力画面に戻ってしまい保存することができません。

実現したいこと

informationsコントローラーのcreateアクションを動かしてペット情報がDBに保存され、詳細画面に遷移するようにしたい。

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

Started POST "/informations" for ::1 at 2022-05-10 09:22:54 +0900 Processing by InformationsController#create as HTML Parameters: {"authenticity_token"=>"hlOo1AP/QawmuxWMa2ewkWdKZmnrTyc13jszewpPQLPbm1qvK7zLMuV9SwXmnNJ2UIlHc+WwgoyPTM+rhW6eBw==", "information"=>{"name"=>"おこげ", "sex"=>"♂", "kinds"=>"雑種", "color"=>"黒", "image"=>#<ActionDispatch::Http::UploadedFile:0x00007f8197a68f68 @tempfile=#<Tempfile:/var/folders/_x/593m4_t55hl77x0d_zdv5clm0000gn/T/RackMultipart20220510-75599-o6hkih.png>, @original_filename="IMG_5179.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"information[image]\"; filename=\"IMG_5179.png\"\r\nContent-Type: image/png\r\n">}, "year"=>"2011", "month"=>"6", "day"=>"2", "commit"=>"登録"} User Load (8.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/controllers/informations_controller.rb:11:in `create' Rendering informations/new.html.erb within layouts/application Rendered informations/new.html.erb within layouts/application (Duration: 4.2ms | Allocations: 1342) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 104ms (Views: 37.5ms | ActiveRecord: 8.2ms | Allocations: 34744)

データベースの画像
https://gyazo.com/8abd95118be38d18ea65a880a365483b

該当のソースコード

informationsコントローラー

class InformationsController < ApplicationController def index end def new @information = Information.new end def create @information = current_user.informations.build(information_params) if @information.save redirect_to information_path(@information) else render :new end end private def information_params params.require(:information).permit(:name, :sex, :kinds, :color, :birthday_id, :image) end end

新規登録画面

<section class="section"> <div class="container"> <div class="columns is-centered"> <div class="column is-6"> <%= form_for @information, url: informations_path, method: :post, local: true do |f| %> <%= f.label :name, "ペットの名前", class: "label" %> <%= f.text_field :name, class: "input" %> <%= f.label :sex, "ペットの性別", class: "label" %> <%= f.text_field :sex, class: "input" %> <%= f.label :kinds, "ペットの種類", class: "label" %> <%= f.text_field :kinds, class: "input" %> <%= f.label :color, "ペットの色", class: "label" %> <%= f.text_field :color, class: "input" %> <%= f.label :birthday_id, "ペットの誕生日", class: "label" %> <span class="select is-primary"> <select name="year"> <option value="">-</option> <option value="1920">1920</option> (長くなってしまうので一部割愛) <option value="2030">2030</option> </select>年 </span> <span class = "select is-primary"> <select name="month"> <option value="">-</option> <option value="1">1</option> (一部割愛) <option value="12">12</option> </select>月 </span> <span class = "select is-primary"> <select name="day"> <option value="">-</option> <option value="1">1</option> (一部割愛) <option value="31">31</option> </select>日 </span> <br> <br> <%= f.label :image, "ペットの写真", class: "label" %> <%= f.attachment_field :image, class: "input" %> <br> <br> <%= f.submit "登録", class: "button is-primary" %> <% end %>

information モデル

class Information < ApplicationRecord belongs_to :user, optional: true attachment :image with_options presence: true do validates :name validates :sex validates :color validates :birthday_id validates :user end end

マイグレーションファイル

class CreateInformation < ActiveRecord::Migration[6.0] def change create_table :information do |t| t.string :name, null: false t.string :sex, null: false t.string :kinds t.string :color, null: false t.date :birthday_id, null: false t.string :image_id t.references :user, null: false, foreign_key:true t.timestamps end end end

試したこと

createアクションでsave!として、挙動を確かめてみると
birthdayとimageに値が入ってないことがわかりました。
paramsに正しい値が入っていないみたいです。
https://gyazo.com/3187ff22a46c45f1f0eada9b3288aebb
https://gyazo.com/4949df78329bf7a6eacef8a8395115c0

カラム名なども確かめてみているのですが、原因がわかりません。
どなたかわかる方がいらっしゃいましたらご教授ください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

birthday_idとしてdbに登録しているのに送信しているパラメータはyear.month.dayだからじゃないですかね
送られてきた値を元にbirthday_id(date型)にマッチする値に加工する必要があるかと思います。

投稿2022/05/10 03:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

milktea246

2022/05/10 05:53

ご指摘ありがとうございます! 新規登録画面の全てのselect nameをselect name = "birthday_id"としましたが、エラー画面は変わりませんでした。直すべきところはこの部分ではなく、別の場所なのでしょうか? 詳しく教えて頂けますと幸いです。
milktea246

2022/05/10 10:06

ありがとうございます! 仰る通り、f.selectで記述し直してみたところ、birthdayの値はしっかり入るようになりました! 申し訳ないのですが、もう1点ほどよろしいでしょうか? birthdayの件が解決した後、このようなエラーが出てしまいました。 https://gyazo.com/af78921eff159fa631098d0d83084ca8 カラム名がimageだけだと入らないという記事を見て、pet_imageにしたのですがそれでも上手く保存できていないみたいです。この場合はどこが原因なのでしょうか? (DBのカラム、params、f.select、モデルのアソシエーションとバリデーションは全てpet_imageに変えました、、)
milktea246

2022/05/10 17:30

何度もすいません、imageの方の件も解決いたしました! カラム名のみpet_image_idとすることでDBに保存することができました。 本当にありがとうございました!
退会済みユーザー

退会済みユーザー

2022/05/11 01:00

解決したようでしたら良かったです。 引き続き頑張ってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問