ruby-on-rails - 如何禁用 ActiveRecord::Migration 冗长?
问题描述
简而言之,我想删除我在规范文件中使用的 ActiveRecord::Migration.create_table 和 drop_table 函数的显示,我该怎么做?
(我自己回答了,但我仍然认为发布它是个好主意,因为 Rails 中缺乏关于该主题的文档)
加长版:
我在 Rails 应用程序上的 Rspec 中使用迁移,我想删除迁移消息。
我这样做是因为我创建了继承 ApplicationRecord 的临时类,并且不确定我的 Rails 应用程序的库部分是否正在处理这种元素(在测试中我需要检查它是否适用于 Hash 和 ApplicationRecord)。
仅举个例子,我的库计算存储在记录中的值组的平均值。
在规范的支持下,我添加了一个 model_average.rb 文件,其中包含:
# frozen_string_literal: true
# migration for the model
def model_average_up
ActiveRecord::Migration.create_table :model_average_data do |t|
t.integer :v1
t.float :v2
end
ActiveRecord::Migration.create_table :model_average_acc_data do |t|
t.float :avg_v1
t.integer :count_v1
t.float :avg_v2
t.integer :count_v2
end
end
def model_average_down
ActiveRecord::Migration.drop_table :model_average_data
ActiveRecord::Migration.drop_table :model_average_acc_data
end
# Test model to compute average on it
class ModelAverageDatum < ApplicationRecord; end
# Test model containing average
class ModelAverageAccData < ApplicationRecord
def eq?(obj)
avg_v1 == obj.avg_v1 && count_v1 == obj.count_v1 && avg_v2 == obj.avg_v2 && count_v2 == obj.count_v2
end
end
在库的规范文件中,在before(:context)
我调用的model_average_up
和在after(:context)
我调用的model_average_down
.
在 rspec 执行期间,它会在点的中间或 test 的文档格式中显示经典的 Migration 输出:
-- create_table(:model_average_data)
-> 0.0059s
-- create_table(:model_average_acc_data)
-> 0.0044s
我想删除该输出。可能吗 ?
解决方案
是的,这是可能的,我找到了答案:
只需将迁移代码放在 ActiveRecord::Migration.suppress_messages 参数中给出的块中。
就我而言:
# migration for the model
def model_average_up
ActiveRecord::Migration.suppress_messages do
ActiveRecord::Migration.create_table :model_average_data do |t|
t.integer :v1
t.float :v2
end
ActiveRecord::Migration.create_table :model_average_acc_data do |t|
t.float :avg_v1
t.integer :count_v1
t.float :avg_v2
t.integer :count_v2
end
end
end
def model_average_down
ActiveRecord::Migration.suppress_messages do
ActiveRecord::Migration.drop_table :model_average_data
ActiveRecord::Migration.drop_table :model_average_acc_data
end
end
然后它就消失了!