Как я могу убедиться, что в Rails день - будний день? - PullRequest
8 голосов
/ 04 октября 2010

У меня есть подстановка сообщения с именем next_week, которая в основном занимает Date.today + 7.days.

Однако, хотя я все еще хочу отправлять электронные письма по выходным, если next_week выпадает на выходные, я хочу, чтобы он это знал и отправлял в понедельник.

Как мне это сделать?

Ответы [ 6 ]

13 голосов
/ 04 октября 2010

Как это:

sunday = 0
saturday = 6
weekend = [saturday, sunday]

mail_date += 1.days while weekend.include?(mail_date.wday)
12 голосов
/ 21 июня 2016

Рельсы 5:

date.on_weekend?
date.on_weekday?

Рельсы 4:

date.saturday? || date.sunday?
2 голосов
/ 27 июля 2017

Как правило, используйте гем business_time (https://github.com/bokmann/business_time),, который решит эту проблему полностью. Эта библиотека позволит вам адаптироваться к различным рабочим неделям (например, с воскресенья по четверг) и даже проверять,час вне рабочего времени.

Ваш случай будет

def next_week
  0.business_days.after(7.days.from_now)
end
2 голосов
/ 04 октября 2010

Вы можете использовать это,

def weekday?   
  (1..5).include?(wday)   
end  

проверить ..

d = Date.today   
=> Mon, 04 Oct 2010   
d.weekday?   
=> true   
d = Date.today - 1   
=> Sun, 03 Oct 2010   
d.weekday?   
=> false  
1 голос
/ 04 октября 2010
mail_date = Date.today + 7.days
if mail_date.wday == 0
  mail_date += 1.day
elsif mail_date.wday == 6
  mail_date += 2.days
end

# now send your email on mail_date

Это полезно?

0 голосов
/ 04 октября 2010

Вы можете использовать Action Mailer Queue. Ваши письма добавляются в очередь, и всякий раз, когда вы вызываете метод ActionMailer Queue , письма отправляются. Таким образом, вы можете вызывать этот метод каждый будний день. По выходным ваши письма будут добавляться в очередь, но не будут отправлены. В понедельник, когда вы позвоните методу, ваши письма будут отправлены. Конечно, вы можете запланировать вызовы методов Action mailer, которые будут вызываться автоматически каждый день, используя задачу rake или Rufus Scheduler.

...