如何使用 has_and_belongs_to_many 为数据库播种

尼诺

has_and_belongs_to_many在两个模型 (PhoneCategory)之间建立了关系,并且我为电话和类别表设置了类似于以下内容的种子:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用具有has_many关系的结构为数据库播种时找不到列

如何更新ActiveRecord及其“ has_and_belongs_to_many”相关对象

使用废弃gem软删除has_and_belongs_to_many关联

rails 4-使用has_and_belongs_to_many关联

Rails渴望使用has_and_belongs_to_many进行加载

我应该使用has_and_belongs_to_many关系吗?

在rails中使用has_and_belongs_to_many实现友谊模型

Rails has_and_belongs_to_many是否可以使用include?

关系has_and_belongs_to_many不保存数据

使用属于用户的任务为数据库播种

如何将 rails 中的 has_many/belongs_to 关系迁移到 has_and_belongs_to_many?

如何使用has_and_belongs_to_many获取自定义变形类

如何使用has_and_belongs_to_many关联获取FactoryGirl模型属性?

给定Rails 5 has_and_belongs_to_many,如何创建联接记录?

Rails ActiveRecord:如何为 has_and_belongs_to_many 关系连接表提供自定义顺序?

如何将has_and_belongs_to_many关系对象放在一起

如何按 has_and_belongs_to_many 关联中的关联属性进行过滤

具有“ has_and_belongs_to_many”的模型-如何通过ID列表进行查询?

如何获取至少包含所有标签的配置文件(has_and_belongs_to_many 关系)

无法使用 FactoryBot 在 Rspec 中建立 has_and_belongs_to_many 关系

在rails中记录具有has_and_belongs_to_many关系的数据

如何使用Rails测试装置为我的开发数据库播种

TypeORM如何播种数据库

如何在AWS Elastic Beanstalk上为Rails应用程序播种数据库

使用另一个表中的对象为ActiveRecord数据库播种

如何使用docker-compose播种mongo数据库?

如何使用带有两个每个循环的 tinker 为数据库虚拟数据播种 - Laravel PHP

播种数据库轨道belongs_to

RoR has_and_belongs_to_many