rake 任务中的 rubocop eval
rubocop eval in rake task
Rubocop 在以下设置中阻塞:
desc 'Clear the db data of development records'
task clear: :environment do
msg('Clearing the development database and rebuilding the default values')
'job,company'.split(/, ?/).each do |model|
# rubocop:disable all
eval("#{model.capitalize}.destroy_all")
# rubocop:enable all
end
end
我暂时跳过了 eval 部分,所以我可以使用这个 rake 任务,但我想知道是否有更好的方法来实现这一点。当我们扩展应用程序并添加更多模型时,我想通过将它们附加到列表来节省时间。
Rubocop 正在抱怨 eval
。您是要清除某些表还是整个数据库?
为了避免 eval
并继续按照自己的方式行事:
使用'some_class_as_a_string'.classify.constanize
。这会将您的字符串变成您要查找的 class。
对于您的情况,解决方案是:model.classify.constantize.destroy_all
如果您要清除整个数据库:
运行 rake 任务 rake db:migrate:reset
清除当前环境的数据库。
这个post:How to run Rake tasks from within Rake tasks?涵盖从另一个rake任务调用rake任务
您似乎正在尝试构建 rake 任务以清除数据库,然后重新播种。这可以使用
来完成
rake db:migrate:reset && rake db:seed
Rubocop 在以下设置中阻塞:
desc 'Clear the db data of development records'
task clear: :environment do
msg('Clearing the development database and rebuilding the default values')
'job,company'.split(/, ?/).each do |model|
# rubocop:disable all
eval("#{model.capitalize}.destroy_all")
# rubocop:enable all
end
end
我暂时跳过了 eval 部分,所以我可以使用这个 rake 任务,但我想知道是否有更好的方法来实现这一点。当我们扩展应用程序并添加更多模型时,我想通过将它们附加到列表来节省时间。
Rubocop 正在抱怨 eval
。您是要清除某些表还是整个数据库?
为了避免 eval
并继续按照自己的方式行事:
使用'some_class_as_a_string'.classify.constanize
。这会将您的字符串变成您要查找的 class。
对于您的情况,解决方案是:model.classify.constantize.destroy_all
如果您要清除整个数据库:
运行 rake 任务 rake db:migrate:reset
清除当前环境的数据库。
这个post:How to run Rake tasks from within Rake tasks?涵盖从另一个rake任务调用rake任务
您似乎正在尝试构建 rake 任务以清除数据库,然后重新播种。这可以使用
来完成rake db:migrate:reset && rake db:seed