2014-10-06 2 views
3

У меня есть модель под названием «Арендатор», и она имеет два атрибута даты tenant_from и tenant_until.Проверьте, существует ли дата между двумя датами

Я хочу написать метод, который проверяет, находится ли Date.today между двумя датами, указанными выше. Я хочу сделать что-то вдоль этих линий:

IF Date.today IS BETWEEN tenant.tenant_from AND tenant.tenant_until DO 
    ... 
ELSE 
    ...  

ответ

14

Попробуйте

if Time.zone.today.between?(tenant.tenant_from, tenant.tenant_until) 
    # YOUR CODE GOES HERE 
else 
    # YOUR CODE GOES HERE 
end 
+1

Идеальный чувак, это был именно тот код, который я искал. Большое спасибо! – NickEckhart

+1

Не забудьте отметить что-то в качестве ответа! –

9

Просто для альтернативного решения. Вы можете использовать диапазон дат и cover? для достижения такого же эффекта.

(tenant.tenant_from .. tenant.tenant_until).cover?(Date.today) 
+1

Я бы рекомендовал обернуть '..' в пространствах для удобства чтения. Белое пространство помогает нашим глазам выделять части строк, кода и т. Д., Что повышает ремонтопригодность. –

+0

Спасибо! Вы определенно правы. –

1
Class Tenant < ActiveRecord::Base 
    def current? #name this what you want, but keep the question mark, since it returns a boolean 
    (tenant.tenant_from.to_date .. tenant.tenant_until.to_date).include?(Date.today) 
    end 
end 

Теперь у вас есть логику модели на примере модели (где она принадлежит). Ваша логика тогда if @tenant.current?.

+0

У Mallanaga отличная точка! Скрыть «бизнес-логику», как это в вашей модели. Это похоже на второстепенную вещь, но со временем это действительно помогает вашим взглядам и контроллерам оставаться читаемыми, тощими и беспорядочными! –

Смежные вопросы