我has_and_belongs_to_many
在两个模型 (Phone
和Category
)之间建立了关系,并且我为电话和类别表设置了类似于以下内容的种子:
Phone.create(name:'Home', phone:'+00 0 00 00 00 00')
Phone.create(name:'Work', phone:'+00 1 00 00 00 00')
Category.create(name:'tactile-screen')
Category.create(name:'mobile')
Category.create(name:'landline')
这是我的 schema.rb
create_table "categories", force: :cascade do |t|
t.string "name"
end
create_table "categories_phones", id: false, force: :cascade do |t|
t.integer "category_id"
t.integer "phones_id"
end
create_table "phones", force: :cascade do |t|
t.string "name"
t.string "phone"
end
这些是我的模型:
class Category < ApplicationRecord
has_and_belongs_to_many :phones
end
class Phone < ApplicationRecord
has_and_belongs_to_many :categories
end
我想为每部手机播种所属类别,我该怎么做?
如果您想将每个 Phone 实例与所有类别相关联,您可以这样做:
Category.create(name:'tactile-screen')
Category.create(name:'mobile')
Category.create(name:'landline')
ids = Category.all.ids
Phone.create(name:'Home', phone:'+00 0 00 00 00 00', category_ids: ids)
Phone.create(name:'Work', phone:'+00 1 00 00 00 00', category_ids: ids)
否则,只需创建记录数组,例如,如果您想应用随机类别,则可以执行以下操作:
categories = ['tactile-screen', 'mobile', 'landline'].map do |c|
Category.create(name: c)
end
phones = [
Phone.create(name:'Home', phone:'+00 0 00 00 00 00'),
Phone.create(name:'Work', phone:'+00 1 00 00 00 00')
]
phones.each do |p|
p.categories << categories.sample
end
如果您使用 Faker 或FFaker,您可以使用这个漂亮的技巧来生成随机记录:
require 'ffaker'
# generate a 100 random numbers
phones = 100.times.map do
Phone.create(name:'Home', FFaker::PhoneNumber.phone_number)
end
# generate between 0 and 100 random numbers
phones = ((rand * 100).floor).times.map do
Phone.create(name:'Home', FFaker::PhoneNumber.phone_number)
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句