Ruby on rails 非常缓慢的迁移
我的最新迁移运行得非常慢(600秒),尽管它做得不多 我有一个模型,其中包含字符串格式的标记,用逗号分隔,如下所示: Model.tags=“TAG1、TAG2、TAG3” 我想创建一个新的标记模型,该模型与我的模型有一个has_和_-belies_-to_-many关系 这里是迁移Ruby on rails 非常缓慢的迁移,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我的最新迁移运行得非常慢(600秒),尽管它做得不多 我有一个模型,其中包含字符串格式的标记,用逗号分隔,如下所示: Model.tags=“TAG1、TAG2、TAG3” 我想创建一个新的标记模型,该模型与我的模型有一个has_和_-belies_-to_-many关系 这里是迁移 def self.up rename_column :pizzas, :tags, :tags_migration create_table :tags do |t| t.string :name t.i
def self.up
rename_column :pizzas, :tags, :tags_migration
create_table :tags do |t|
t.string :name
t.integer :count
t.timestamps
end
create_join_table :tags, :pizzas do |t|
t.index [:tag_id, :pizza_id]
end
Pizza.all.each do |pizza|
pizza_tags = pizza.tags_migration
unless pizza_tags.empty?
pizza_tags_array = pizza_tags.split(', ')
pizza_tags_array.each do |tag|
t = Tag.find_by(name: tag)
if t.nil?
t = Tag.new
t.name = tag
t.count = 1
else
t.count = t.count + 1
end
t.pizzas << pizza
t.save
pizza.tags << t
pizza.save
end
end
puts "pizza n" + pizza.id.to_s
end
end
def self.up
重命名列:pizzas,:tags,:tags\u迁移
创建|u表:标记do|t|
t、 字符串:名称
t、 整数:计数
t、 时间戳
结束
创建|join|table:tags,:pizzas do|t|
t、 索引[:tag\u id,:pizza\u id]
结束
披萨。所有人都做披萨|
pizza\u标记=pizza.tags\u迁移
除非比萨饼是空的?
pizza_tags_数组=pizza_tags.split(','))
比萨饼标签数组。每个do标签|
t=标记。查找方法(名称:标记)
如果t.nil?
t=Tag.new
t、 名称=标记
t、 计数=1
其他的
t、 计数=t.计数+1
结束
t、 pizzas看起来你可能在内存中保存了很多东西(因为Pizza.all
)。一个简单的性能优势是将Pizza.all.each
更改为Pizza.find\u each
@codenamev关于find_each
您在标记中有n+1个查询。查找方法(名称:标记)
还有这里
-
t.pizzas
t.pizzas << pizza
t.save
pizza.tags << t
pizza.save