【问题标题】:Unable to persist to database in Rails console?无法在 Rails 控制台中持久保存到数据库?
【发布时间】:2019-10-05 07:10:03
【问题描述】:

设置关联后,我尝试在控制台中对其进行测试,但无法持久保存到数据库。我不知道为什么会这样!

我已成功运行所有迁移并重新加载了控制台。仍然无法坚持。

#Item.rb

class Item < ApplicationRecord
  belongs_to :list
end

#List.rb

class List < ApplicationRecord
  has_many :items
end

#Schema

create_table "items", force: :cascade do |t|
    t.string "description"
    t.integer "list_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

create_table "lists", force: :cascade do |t|
    t.string "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

#Console output:
>> Item.create(:description => "Cookies")
 (0.1ms)  begin transaction
 (0.1ms)  rollback transaction
=> <Item id: nil, description: "Cookies", list_id: nil, created_at: nil, updated_at: nil>

>> cookies = Item.create(description: "Cookies")
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
=> #<Item id: nil, description: "Cookies", list_id: nil, created_at: nil, updated_at: nil>

>> i = Item.new
=> #<Item id: nil, description: nil, list_id: nil, created_at: nil, updated_at: nil>
>> i.save
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
=> false

【问题讨论】:

    标签: ruby-on-rails database activerecord associations


    【解决方案1】:

    在您的Item 课程中,您已经完成了:

    belongs_to :list
    

    这意味着list 是必需的。您没有提供列表,因此保存失败。如果你这样做,你会看到这个:

    Item.create!(:description => "Cookies")
    

    (发出一声巨响,这将导致抛出错误)在控制台中。

    如果您希望list 是可选的,您需要这样做:

    belongs_to :list,可选:true

    【讨论】:

    • 完美!感谢您的帮助!
    • 很高兴它有帮助。请随时投票和接受(以帮助未来的搜索者)。
    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多