Ran*_*mir 4 ruby ruby-on-rails rails-migrations ruby-on-rails-5
我想使用迁移运行 rake 任务,因为我们希望当用户运行时,rails db:migrate此任务将通过迁移运行。
我的耙子任务是:
namespace :task_for_log do
desc "This task set by default as current date for those logs where log_date is nil"
task set_by_default_date_of_log: :environment do
Log.where("log_date IS NULL").each do |log|
log.update_attributes(log_date: log.created_at.to_date)
end
end
end
Run Code Online (Sandbox Code Playgroud)
请指导执行此任务的迁移将是什么,这里的任何人都将拯救我的生命?
迁移实际上只是遵循约定的 Ruby 文件,因此如果您想在其中运行 rake 任务,您只需调用 Rake 类即可。
class ExampleMigration < ActiveRecord::Migration[5.0]
def change
Rake::Task['task_for_log'].invoke
end
end
Run Code Online (Sandbox Code Playgroud)
但是,迁移文件应该专门用于处理数据库模式。我会重新考虑您如何处理问题以获得更好的解决方案。例如,您可以运行更新日志属性的 SQL 语句,而不是调用 rake 任务。
class ExampleMigration < ActiveRecord::Migration[5.0]
def change
execute <<-SQL
UPDATE logs SET log_date = created_at WHERE log_date IS NULL
SQL
end
end
Run Code Online (Sandbox Code Playgroud)
参考:
| 归档时间: |
|
| 查看次数: |
3008 次 |
| 最近记录: |