0

レールでは、プロファイルオブジェクトを作成、保存、更新した後、:dob dateフィールドに基づいて年齢を計算するにはどうすればよいですか?

私のモデルには次の方法があります。

  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
4

1 に答える 1

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は、変更を1回コミットするため、after_saveよりも優れています。

また、年齢は常にオンザフライで取得する必要があるため、列の年齢は必要ないと思います。

ありがとう

于 2012-10-02T17:15:46.623 に答える