记录年龄基于:创建,保存和更新配置文件对象后的dob日期字段?

时间:2012-10-02 17:11:16

标签: ruby-on-rails ruby-on-rails-3 activerecord calculated-field

在rails中,如何在创建,保存和更新配置文件对象后根据:dob日期字段计算年龄?

我的模型中有这个方法:

  def set_age
    bd = self.dob
    d = Date.today
    age = d.year - bd.year
    age = age - 1 if (
    bd.month > d.month or
        (bd.month >= d.month and bd.day > d.day)
    )
    self.age = age.to_i
  end

1 个答案:

答案 0 :(得分:1)

您可以像这样使用after_save回调

after_save: set_age

def set_age
    bd = self.dob
    d = Date.today
    age = d.year - bd.year
    age = age - 1 if (
    bd.month > d.month or
        (bd.month >= d.month and bd.day > d.day)
    )
    self.age = age.to_i
    self.save
  end

或before_save回调

before_save: set_age

def set_age
    bd = self.dob
    d = Date.today
    age = d.year - bd.year
    age = age - 1 if (
    bd.month > d.month or
        (bd.month >= d.month and bd.day > d.day)
    )
    self.age = age.to_i
  end

before_save优于after_save,因为它将提交一次更改。

我还认为你不需要列年龄,因为年龄应该总是在飞行中得出。

由于