2014-08-25 2 views
0

Я создаю приложение на рынке, где продавцы могут перечислить предметы для продажи. Я хочу установить дату истечения срока действия, чтобы листинги в течение 30 дней не показывались на сайте.Rails Дата запроса для истечения срока действия

Я нашел несколько подобных примеров в Интернете, но не могу заставить этот запрос работать.

@listings = Listing.where('created_at <= ?', Date.created_at + 30.day) 
+1

Попробуйте '@listings = Листинг. где ('created_at <=?', Time.now - 30.day) ' –

+0

Я получаю ошибку' undefined method '' created_at 'для Date: Class'. Created_at - это столбец, который автоматически создается рельсами при создании списка. – Moosa

+1

Пожалуйста, проверьте ответ ниже, я сделал небольшую ошибку в предыдущем комментарии. –

ответ

2

Вы хотите запросить элементычей created_at время >= текущая дата (Date.current) - 30 дней (30.day). Таким образом, запрос должен быть просто:

@listings = Listing.where('created_at >= ?', Date.current - 30.day) 

Вы также можете заменить Date.current с Time.now или DateTime.now.

UPDATE: в user3334690 упоминается в комментариях, это рекомендуется сделать этот метод модели, так это то, что должно быть в модели слоя:

# app/models/listing.rb 
def self.not_expired 
    where('created_at >= ?', Date.current - 30.day) 
end 

# now in controllers you can do something like 
@listings = Listing.not_expired 
+0

Я бы предложил сделать его областью в листинговой модели, хотя ... что-то вроде текущего или релевантного или даже не_expired – user3334690

+0

@ user3334690 Вы имеете в виду метод модели? –

+0

Как поместить тот же метод not_expired в оператор if? Вышеприведенный код позволяет фильтровать результаты на страницах индекса. Но если я хочу отправить сообщение об истечении срока действия при отображении отображаемых страниц, могу ли я ввести оператор if в метод 'def show'? – Moosa

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