【问题标题】:How to seed belongs to and has many associantion with seeds.rb如何播种属于seeds.rb并与它有很多关联
【发布时间】:2019-04-24 23:19:28
【问题描述】:

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

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

class Product < ApplicationRecord
    belongs_to :categories
end

class Category < ApplicationRecord
    has_many :products
end

种子.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。 如果我评论产品模型中的关联,它可以工作,但这不是解决方案。

【问题讨论】:

  • 您能否确认您的category 变量(最好重命名为category_ids 或类似名称)肯定包含一组ID?

标签: ruby-on-rails ruby


【解决方案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

【讨论】:

  • 它给出了同样的错误。 ActiveRecord :: RecordInvalid:验证失败:需要类别
  • @lufizi 我已经更新了我的答案:我认为是您的关联设置导致了问题。尝试更新底部部分,看看是否可以正常工作。
  • 太棒了,很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
相关资源
最近更新 更多