如何播种属于seed.rb并与之有很多关联

时间:2019-04-24 13:17:30

标签: ruby-on-rails ruby

我有两个模型。一种是类别,另一种是产品。我已经填充了类别表,现在我需要用类别ID填充产品之一。 我正在为这个人群使用假货。

模型和seed.rb文件是这样的

class Product < ApplicationRecord
    belongs_to :categories
end

class Category < ApplicationRecord
    has_many :products
end

seeds.rb

category = Category.ids

100.times do
    Product.create!([{
        name_product: Faker::Commerce.product_name
    },
    {
        value_product: Faker::Commerce.price
    },
    {
        category_id: category.sample
    }
    ])
end

但是即使传递类别ID,我仍然收到错误消息“验证失败。类别是必需的”。 如果我在产品模型中评论该关联,则可以,但这不是解决方案。

2 个答案:

答案 0 :(得分:1)

我认为您的问题在于您如何尝试创建产品。

当您传递哈希数组时,您当前的代码将尝试创建三个产品-其中两个没有类别ID:

Product.create!([
  {
    name_product: Faker::Commerce.product_name # << first product, no category
  },
  {
    value_product: Faker::Commerce.price # << second product, no category 
  },
  {
    category_id: category.sample # << third product
  }
])

您的问题尚不清楚,但请在100.times do块中尝试以下方法之一:

Product.create!(
    name_product: Faker::Commerce.product_name,
    value_product: Faker::Commerce.price,
    category_id: category.sample
)

或者:

Product.create!([
  {
    name_product: Faker::Commerce.product_name,
    category_id: category.sample
  },
  {
    value_product: Faker::Commerce.price,
    category_id: category.sample
  },
  {
    category_id: category.sample
  }
])

如果每个实例具有name_productvalue_productcategory_id列,则前者将创建一条记录;后三个产品都具有category_id

让我知道您的生活如何,如果有帮助的话。


编辑

好像您的关联设置不正确。试试:

class Product < ApplicationRecord
  belongs_to :category
end

答案 1 :(得分:-1)

希望它会起作用...

category = Category.ids

100.times do
    Product.create!(name_product: Faker::Commerce.product_name, value_product: Faker::Commerce.price, category_id: category.sample)
end