[英]How to use date as parameters for a rake task
我有一個如下的 rake 任務,需要在import_date
部分輸入日期才能執行它。 然后將放在import_date
部分的日期保存在表中名為import_date
的列中。
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
#actions
現在,我希望代碼只有在輸入正確的日期時才能工作。如果格式錯誤,我希望它不執行 rake 任務,而是給我一個錯誤代碼,告訴我日期格式錯誤.
# This should work
RAILS_ENV=production ./bin/rake member:create_csv[20201119]
# This shouldn't work, because the date has too many digits.
RAILS_ENV=production ./bin/rake member:create_csv[20200001119]
下面的代碼是否適合這樣做?
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
require 'date'
date = Date.today
if args.worked_on == date.strftime("%Y%m%d")
# action
else
p "ERROR"
end
end
更新
我不一定希望它的代碼將'import_date'與今天的日期進行比較,我希望它只是查看用戶輸入的'import_date'是否遵循“%Y%m%d”的規則。 在這種情況下,下面的代碼會更好嗎?
namespace :graduated_member do
desc 'import member'
task: create_csv, ['import_date'] => :environment do |task, args|
if args.import_date.strftime("%Y%m%d")
# action
else
p "ERROR"
end
您可以對字符串使用to_date
方法將args
轉換為Date
object。 那你today?
檢查通過日期的方法。 此外,您不需要要求 Rails 已經要求的date
。
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
if args['import_date'].to_date.today?
# action
else
p "ERROR"
end
end
end
在這種情況下,如果日期格式不正確,您將收到此異常ArgumentError: invalid date
UPD
如果您想與其他日期進行比較。
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
if args['import_date'].to_date == Date.new(2020, 11, 26)
# action
else
p "ERROR"
end
end
end
如果您想確保您的論點遵循特定模式
namespace :graduated_member do
desc 'import member'
task :create_csv, ['import_date'] => :environment do |task, args|
Date.strptime(args['import_date'], '%Y%m%d')
# action
rescue ArgumentError
p "ERROR"
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.