播种类别和子类别

时间:2016-05-30 14:37:48

标签: ruby-on-rails ruby

我正在尝试使用静态类别(例如Men's / Women's)播种我的数据库,然后有属于这些类别的子类别,但实际上我不知道如何使用数据库种子进行此操作。

我的模型设置如下:

Category.rb

class Category < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, use: :slugged

  has_many :subcategories
  has_many :products ,:through => :subcategories
end

Subcategory.rb

class Subcategory < ActiveRecord::Base
  belongs_to :category
  has_many :products
end

Product.rb

class Product < ActiveRecord::Base
  acts_as_taggable
  extend FriendlyId
  friendly_id :name, use: :slugged
  belongs_to :subcategory
end

我如何编写数据库种子来执行此操作?

1 个答案:

答案 0 :(得分:1)

首先想到的是(至少我的)是创建局部变量:

# db/seeds.rb
mens = Category.create(name: "Men's")
womens = Category.create(name: "Women's")
SubCategory.create(name: 'Slacks', category: mens)
SubCategory.create(name: 'Slacks', category: womens)

更好的(除了类别之外不能创建子类别)解决方案是将Model.create与块一起使用:

Category.create(name: "Men's") do |category|
  Subcategory.create(name: 'Slacks', category: category)
end

然后使用rake任务播种:$ rake db:seed