2013-11-29 3 views
0

Спасибо за вашу постоянную поддержку в моем последнем проекте в приложении Rails. Прошло некоторое время с тех пор, как я сделал что-то в Rails, вот мой последний вопрос. Я ценю помощь, которую вы все отдавали в прошлом.ActiveRecord, где прошел метод datetime

У меня есть модель Event.rb, которая содержит дату: дату и время: поля времени для события.

У меня также есть метод внутри модели, которая ..

def begins 
    DateTime.new(date.year, date.month, date.day, time.hour, time.min, time.sec) 
end 

Как я не могу увидеть, если что-то действительно прошло, потому что у меня есть только дата и время отдельно, поэтому мне нужно их вместе.

Мой вопрос ...

Я хочу, чтобы иметь возможность добавлять в DateTime: начинается в следующий другой метод в моей модели ...

def self.past 
    where("date <= ?", TIME_NOW) 
end 

Так же, как у меня есть метод который является ...

def upcoming? 
    self.date >= Time.now 
end 

Который я могу легко изменить self.date, чтобы начать и прошло бы, я бы представил?

Спасибо!

+0

С помощью 'self.past' вы намерены проверить, прошел ли только один экземпляр или вы хотите запросить базу данных для прошлых событий? –

+0

Для этого он просто будет использоваться при выполнении '@events = Event.past', а затем другой для' Event.find (1) .pcoming? ' – notrab

ответ

1

Возможно, что-то, как это будет работать для запросов к базе данных за прошлые события, используя существующие date и time колонки:

scope :past, lambda { 
    where("date <= ? and time <= ?", 
     Time.now.strftime("%Y-%d-%m"), 
     Time.now.strftime("%H:%M:%S") 
     ) 
} 

past_events = Event.past 

Для проверки текущего экземпляра, вы можете продолжать использовать ваш begins метод:

def past? 
    begins < DateTime.now 
end 

@event = Event.first 
@event.past? 
+0

Спасибо, однако, я получаю следующую ошибку. . 'PG :: DatetimeFieldOverflow: ОШИБКА: значение поля даты/времени вне диапазона:« 2013-30-11 » LINE 1: ... s« WHERE »события«. »Отмечено« IS NULL AND (дата> = ' 2013-30-1 ... ^ СОВЕТ: Возможно, вам нужна другая настройка «datestyle». Не знаете, как решить проблему. – notrab

+1

Вы можете попробовать отправить дату 'где (" date <= date (?). ..' или вы можете использовать функцию postgres 'now()': где («date <= now() и time <= localtime()). Я не уверен, что now() - лучшая идея, хотя потому что вам, возможно, придется беспокоиться о часовых поясах ваших пользователей. –

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