#前提・実現したいこと
コンソールで
booksテーブルに name: "book1" と price: 1000 と **published_on: Time.parse("20201010").ago(1.months)**を保存したい。
booksテーブルにデータは保存はできないがpublishersテーブルにデータは保存できる。
バージョン
ruby '2.6.6'
'rails', '> 6.0.3', '>= 6.0.3.'> 0.4.2'
'mysql2', '
#発生している問題、idがnillになってしまう
[12] pry(main)> book = Book.create( [12] pry(main)* name: "Book 1", [12] pry(main)* published_on: Time.parse("20201010").ago(1.months), [12] pry(main)* price: 1000, [12] pry(main)* ) => #<Book:0x00007fb4f3e62e40 id: nil, name: "Book 1", published_on: Thu, 10 Sep 2020, price: 1000, image: nil, created_at: nil, updated_at: nil, publisher_id: nil, sales_status: nil>
⬇︎publishersテーブルは保存出来る⬇︎
1] pry(main)> publisher = Publisher.create( [1] pry(main)* name: "Gihyo inc.", [1] pry(main)* address: "Ichigaya", [1] pry(main)* ) (0.8ms) 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 (11.7ms) BEGIN Publisher Create (54.3ms) INSERT INTO `publishers` (`name`, `address`, `created_at`, `updated_at`) VALUES ('Gihyo inc.', 'Ichigaya', '2020-08-02 10:51:14.216360', '2020-08-02 10:51:14.216360') (3.6ms) COMMIT => #<Publisher:0x00007fa7ef32f868 id: 1, name: "Gihyo inc.", address: "Ichigaya", created_at: Sun, 02 Aug 2020 10:51:14 UTC +00:00, updated_at: Sun, 02 Aug 2020 10:51:14 UTC +00:00>
なんでpublishersテーブルは保存できるの??
#該当のソースコード
どこが該当しているのか分からないのでここかな?というところを載せています。
bookscontroller
1class BooksController < ApplicationController 2 3 def index 4 @books = Book.all 5 end 6end
routes
1Rails.application.routes.draw do 2 resources :books, only: :index 3 resources :publishers 4 resources :profile 5end
class Book < ApplicationRecord enum sales_status: { reservation: 0, # 予約受付中 now_on_sale: 1, # 発売中 end_of_print: 2, # 販売終了 } scope :costly, -> { where("price > ?", 3000) } scope :written_about, ->(theme) { where("name like ?", "%#{theme}%") } belongs_to :publisher, optional: true # 本は出版社名を一つ持っている has_many :book_authors # 本はたくさんの著者が書いている、中間テーブル has_many :authors, through: :book_authors # 著者はたくさんの本を書いている validates :name, presence: true # 空の値は認めない validates :name, length: { maximum: 25 } # 文字数の上限は25 validates :price, numericality: { greater_than_or_equal_to: 0 } # 値段は0以上にしないと認めない end
#自分で調べたこと、エラー文
Book.create!でエラーを調べ下記のエラー文が出ています。
[13] pry(main)> Book.create! ActiveRecord::RecordInvalid: Validation failed: Publisher must exist, Name can't be blank, Price is not a number from /Users/7tk/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.2/lib/active_record/validations.rb:80:in `raise_validation_error'
ActiveRecord :: RecordInvalid:検証に失敗しました:パブリッシャーが存在している必要があります。名前を空白にすることはできません。価格は数値ではありません
との意味で
[12] pry(main)> book = Book.create( [12] pry(main)* name: "Book 1", [12] pry(main)* published_on: Time.parse("20201010").ago(1.months), [12] pry(main)* price: 1000, [12] pry(main)* )
上記のように書いたのですがどこが間違っているのか分からなかったので、
わかる方がいらっしゃいましたらよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/02 15:58 編集
2020/08/02 20:11
2020/08/03 03:08 編集
2020/08/03 03:21
2020/08/03 03:50 編集