2016-05-27 2 views
0

Я хочу, чтобы все пользователи, возраст которых больше 4 в запросе. Я пробовал это, но я не могу получить год использования атрибута date_of_birthday пользователя. Как мы можем получить год или есть простой способ сделать это.Получить пользователя, где пользовательский год больше, чем Time.now - 4

User.where('date_of_birth.year < ?',Time.now - 4) 
+0

'Time.now - 4.years => 2012-05-27 9:44:27 -0400' – kobaltz

+0

вопрос с date_of_birth.year, не давая мне получить год date_of_birth. –

ответ

0

Даже если ваш date_of_birth тип дата данных, можно по-прежнему на основе DateTime или просто Time.

Таким образом, вы можете выполнить поиск в вашем Пользовательском модемом, где день рождения составляет пользователю не менее 4 лет. Это учитывало бы не только год их рождения, но и месяц и день.

2.3.1 :001 > User.where('birthday < ?', DateTime.now - 4.years).size 
    (0.6ms) SELECT COUNT(*) FROM `users` WHERE (birthday < '2012-05-27 13:51:49.162909') 
=> 51 

Здесь вы можете видеть, что атрибут дня рождения в моем примере является типом данных даты, а не временем.

2.3.1 :003 > User.where('birthday < ?', DateTime.now - 4.years).first.birthday 
    User Load (0.8ms) SELECT `users`.* FROM `users` WHERE (birthday < '2012-05-27 13:52:09.802729') ORDER BY `users`.`id` ASC LIMIT 1 
=> Mon, 02 May 1960