我想在Rails中使用迁移运行一个Rake任务。每次执行rails db:migrate
命令 , 任务将通过迁移运行。
当前的Rake任务如下。
namespace :task_for_log do
desc 'This task sets current date as a default for 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
如何使用迁移文件运行该任务?
3条答案
按热度按时间1bqhqjot1#
迁移实际上只是遵循约定的Ruby文件,所以如果你想在其中运行一个rake任务,你可以调用Rake类。
然而,迁移文件应该专门用于处理数据库模式。我会重新考虑如何处理这个问题以获得更好的解决方案。例如,您可以运行一条SQL语句来更新日志属性,而不是调用rake任务。
参考文献:
bwitn5fc2#
如果你想在自动运行
db:migrate
之后运行你的任务,你可以使用enhance
。对于rails应用程序,您可以将其放在
lib/tasks
文件夹中的任何位置,或者将任务内联(在.enhance do
块内)。js81xvg63#
你可以去@约瑟夫提到更好的解决方案!或创建自定义任务。
rake:
任务: