【问题标题】:Rails seed not creating instances in databases while db:seedRails 种子没有在数据库中创建实例,而 db:seed
【发布时间】:2026-01-09 07:00:01
【问题描述】:

我正在尝试创建一个类似 API 的小型电子商务。我正在尝试使用 Faker 创建模拟用户,并在种子期间创建一个购物车实例,并将其作为外键附加(每个用户都应该有一个购物车)。我尝试了两种不同的方法

这些文件在 db 文件夹中的 seed.rb 文件中 尝试1: 5.次做 产品.create({ 标题:Faker::Commerce.product_name, 价格:Faker::Commerce.price, inventory_count: Faker::Number.number(2) })

end

3.times do
  ShoppingCart.create({
                                 total_price: 0
                             }) do |t|


  User.create({
                  name: Faker::Name.name,
                  shopping_carts_id: t.id
              })
    end
end

尝试2:(产品的相同创建)

3.times 做 购物车 = ShoppingCart.create({ 总价格:0 })

  User.create({
                  name: Faker::Name.name,
                  shopping_carts_id: cart.id
              })
    end
end

这是模型

class ShoppingCart < ApplicationRecord
  belongs_to :users
  has_many :products
end

当我运行种子时,用户创建良好,但没有购物车。用户应该有一个外键到它的购物车。我对 Rails 很陌生,很难理解数据库关系。

【问题讨论】:

  • 请记住,对于 Ruby,{ ... } 大括号对于仅哈希参数列表是可选的。就像 User.create({ name: '...' }) 可以代替 User.create(name: '...') 一样简洁得多。这也可能解决这里的一些真正不稳定的缩进。
  • 尝试调用create!在两者上,看看是否引发错误

标签: mysql ruby-on-rails ruby


【解决方案1】:

您是否尝试过通过迁移添加外键并查看结果?

rails g migration AddForeignKeyToShoppingCart

然后在新的迁移文件中,添加:

def change
  add_foreign_key :shopping_carts, :users
end

【讨论】:

    最近更新 更多