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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

422閲覧

投稿機能がうまくいきません。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2022/08/28 02:51

・困っている箇所
投稿機能を付けようとしているのですが、うまく投稿がされないのでrails cから試してみたところ、うまくいきませんでした。
多くのカラムをpresence: trueにしていたので、一度titleカラムだけをtrueにして、titleだけを入力してそもそも登録できるかを試してみたところ、

3.0.0 :010 > plan = user.plans.build(title: 'test') => #<Plan id: nil, title: "test", user_id: 1, photo: nil, detail: nil, start_on: nil, end_on: nil, created_at: nil, updated_at: nil> 3.0.0 :011 > plan.save => false

このように登録できませんでした。
これはどこの箇所がおかしいのでしょうか?
この前の手順の箇所を重点にコードを添付させていただきます。

・カラム
まずカラムの情報なのですが

mysql> describe plans; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | title | varchar(255) | YES | | NULL | | | user_id | bigint(20) | NO | MUL | NULL | | | photo | varchar(255) | YES | | NULL | | | detail | text | YES | | NULL | | | start_on | date | YES | | NULL | | | end_on | date | YES | | NULL | | | created_at | datetime(6) | NO | | NULL | | | updated_at | datetime(6) | NO | | NULL | | +------------+--------------+------+-----+---------+----------------+ 9 rows in set (0.00 sec)

・マイグレーション

class CreatePlans < ActiveRecord::Migration[6.1] def change create_table :plans do |t| t.string :title t.references :user, null: false, foreign_key: true t.string :photo t.text :detail t.date :start_on t.date :end_on t.timestamps end end end

・モデル

class Plan < ApplicationRecord belongs_to :user validates :title, presence: true, length: { maximum: 50 } validates :photo, presence: false validates :detail, presence: false, length: { maximum: 5000 } validates :start_on, presence: false validates :end_on, presence: false end

これでは情報が足りない場合はコメントして頂けたら幸いです。
この質問で大丈夫か不安ですが、ご解答の程、宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

presence: false はあまり良くないですね。コメントにして無効にしたほうが良かった。
belongs_to :user があるので、実在するuser_id が必須です。
3.0.0 :011 > plan.save
=> false
のあと、 plan.errors.messages ってやると何が悪かったかわかります。

投稿2022/08/28 03:08

winterboum

総合スコア23372

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

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

退会済みユーザー

退会済みユーザー

2022/08/28 04:39

回答ありがとうございます plan.errors.messagesで確認してみたところ 3.0.0 :012 > plan.errors.messages => {:photo=>["can't be blank"], :detail=>["can't be blank"]} 出たのですがこれは先述のようにコメントにして一度無効にしてみてから再度試したほうがよいでしょうか? ちなみに実在するuser_idはあります。
退会済みユーザー

退会済みユーザー

2022/08/28 04:47

コメントにして登録できるか試していただいたのですが、登録できませんでした。 なので再びplan.errors.messagesさせて頂いたところ、再び {:photo=>["can't be blank"], :detail=>["can't be blank"]} と表示されました。 これはphotoカラムとdetailカラムに問題があるということでしょうか? ・コメントしたモデル class Plan < ApplicationRecord belongs_to :user validates :title, presence: true, length: { maximum: 50 } validates :photo #presence: false validates :detail #presence: false, length: { maximum: 5000 } validates :start_on #presence: false validates :end_on #presence: false end ・コメント後の登録 3.0.0 :018 > plan = user.plans.build(title: 'test') => #<Plan id: nil, title: "test", user_id: 1, photo: nil, detail: nil, start_on: nil, end_on: nil, created_at: nil, updated_at: nil> 3.0.0 :019 > plan.save => false 3.0.0 :020 > plan.errors.messages => {:photo=>["can't be blank"], :detail=>["can't be blank"]}
winterboum

2022/08/28 05:00

validation戻して photo、detail いれて試しては? ああ、「コメントしたモデル」になってないじゃないですか validates :photo #presence: false ではなく # validates :photo, presence: false
退会済みユーザー

退会済みユーザー

2022/08/28 05:03

すみません。 今気づきまして、ちょうど修正して試したところ、保存できました! 3.0.0 :002 > user.plans Plan Load (0.3ms) SELECT `plans`.* FROM `plans` WHERE `plans`.`user_id` = 1 /* loading for inspect */ LIMIT 11 => #<ActiveRecord::Associations::CollectionProxy []> 3.0.0 :003 > plan = user.plans.build(title: 'test') => #<Plan id: nil, title: "test", user_id: 1, photo: nil, detail: nil, start_on: nil, end_on: nil, created_at: nil, updated_at: nil> 3.0.0 :004 > plan.save TRANSACTION (2.2ms) BEGIN Plan Create (2.9ms) INSERT INTO `plans` (`title`, `user_id`, `created_at`, `updated_at`) VALUES ('test', 1, '2022-08-28 05:00:47.331839', '2022-08-28 05:00:47.331839') TRANSACTION (3.4ms) COMMIT => true ということは問題は:photoと:detailに問題があるのでしょうか?
退会済みユーザー

退会済みユーザー

2022/08/28 05:06

すみません。また解釈を間違えました。 登録は記入をすればしっかり行われているということですね! つきましては現在、フォーム欄から登録ができなかったので、そもそも登録できないのかと思って確認していたところ、うまく登録ができず困っていたので質問させていただきました。 なのでフォーム欄に問題があるとみてテストしてみます! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問