В моем приложении rails пользователь может искать пациентов и выбирать, сколько лет пациенту следует максимально!Date.today минус 18 лет Ruby
Здесь вы можете увидеть мой код, в котором выбраны только пациенты, у которых больной, родившийся мало или равен максимальному возрасту.
patients = patients.where("birthday >= ?", year(maximal)) if maximal.present?
Типы пользователей в возрасте для, например, 15, как максимальные, так что я должен преобразовать входной сигнал к дате:
def year(maximal)
a = Date.today
year = a.year - maximal
month = a.mon
day = a.mday
Date.new(year,month,day)
end
Теперь моя проблемы: Если у меня есть для, например:
Patient.birthday => 29.09.1994 (означает HES 18)
и ¯u ser для максимального => 18
Этот пользователь не отображается в списке, хотя должен быть показан. Я знаю, что мне нужно изменить свой год обучения, но я не знаю, как это сделать! Может быть, вы можете мне помочь Спасибо!
UPDATEUPDATEUPDATEUPDATEUPDATEUPDATEUPDATEUPDATEUPDATEUPDATEUPDATEUPDATE
Ok мой новый код:
patients = patients.where("#{age(:birthday)} >= ?", maximum) if maximum.present?
и
def age(dobss)
dob = Date.new(dobss)
now = Time.now.utc.to_date
now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
end
Но теперь я получаю ошибку:
comparison of Symbol with 0 failed
app/models/search.rb:28:in `<'
app/models/search.rb:28:in `new'
app/models/search.rb:28:in `age'
возможный дубликат [Получить возраст человека в Рубине] (HTTP: // stackover flow.com/questions/819263/get-persons-age-in-ruby) –
Как выглядит строка 28 в 'app/models/search.rb'? – lurker
28 is dob = Date.new (dobss) На самом деле: день рождения определяется как дата в моей модели –