0

我在application_helper创建了一个助手:

 def birthday(geburt)
   f = Date.today
   a = f.year - geburt.year
   a = a - 1 if (
     geburt.month >  f.month or 
    (geburt.month >= f.month and geburt.day > f.day)
    )
    a
 end 

现在我尝试在模型中使用这个助手

 patients = patients.where("birthday(geburtsdatum) >= ?", minimum) if minimum.present?

但是你怎么能在错误中看到我没有正确使用我的助手。“geburtsdatum”是我的患者模型中的一个列。谢谢错误:

 SQLite3::SQLException: no such function: birthday: SELECT "patients".* FROM "patients"  WHERE (birthday(geburtsdatum) >= 15) ORDER BY vorname

我的新代码:

def find_patients
 patients = Patient.order(:vorname)
 patients = patients.where("nachname like ?", "%#{keyword}%") if keyword.present?
 patients = patients.where("#{geburtsdatum.get_birthday} >= ?", minimum) if   minimum.present?
 patients
end

我的新错误:

undefined local variable or method `geburtsdatum' for #<Search:0x4ee51b8>
4

1 回答 1

1

明白了,那么这个方法就是针对 Date 对象的。

正如您在该参考资料中提到的那样,包括助手是可行的,但不是一个好的做法。你可以做一个快速修复,没有错。

仅供参考,我认为更好的方法是在您的应用程序中扩展 Date 类以添加此类方法,然后您可以在 Date 对象上调用它,例如some_date.process_birthday.

/app您可以在、 或/initializers、 或中添加此类文件/lib(更好,但需要手动要求)。

然后

class Date
  def get_birthday
    f = Date.today
    a = f.year - self.year
    if (self.month >  f.month) || (self.month >= f.month && self.day > f.day)
      a = a - 1
    end 
    a
  end
end
于 2013-09-14T12:58:50.150 回答