如何在数据库after_save或before_save中保存计算的年龄

时间:2013-03-20 09:48:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

用户需要在保存个人资料之前输入他的生日。我在配置文件表中也有一个年龄列。但我不希望用户必须填写他的DOB和年龄。我已经有一种方法可以根据他的生日计算用户年龄。问题是如何计算数据库中的用户年龄?

5 个答案:

答案 0 :(得分:5)

我建议您不要将其保存在数据库中,在应用程序需要时进行计算。

如果您将其保存在数据库中,那么您可能会在没有更新值的情况下让它们变老!

答案 1 :(得分:2)

您可以在模型中使用抽象属性(而不是数据库中的列),这将为您计算年龄。例如:

dob =数据库表中的列
age =抽象属性

class User < ActiveRecord::Base
  attr_accessible :dob
  attr_accessor :age

  def age
    Time.now.year - self.dob.year
  end

end

通过这种方式,您可以轻松找到用户的年龄:

u = User.find(1)
u.dob
=> Thu, 20 Mar 2008 
u.age
=> 5 

但是,我建议您查看this post,因为有一些关于闰年的问题,您可能需要调整age方法。

编辑 - 无论如何,如果您有充分的理由在表格中添加列age,则应使用before_save,因为它会在{{{ 1}}和create

update

答案 2 :(得分:1)

使用java脚本函数在HTML页面的应用程序中,您可以通过jquery - date方法计算用户的年龄。

只需在JS文件中编写一个函数calculate_age()即可。并将该值放在其中一个隐藏字段中。您可以使用该隐藏字段在db中存储年龄。

在您收集出生日期的输入框中,只需编写onblur事件即可调用calculate_age()函数。

HTML代码

<input type='text' id='dob' name='dob' onblur='calculate_age(this);' />
<input type='hidden' id='age' name='age' />

JS代码

function calculate_age(element_id){
    var date_of_birth = $('#'+element_id).val();
   // JS code for calculating age using date of birth
   $('#age').val(age);
}

答案 3 :(得分:1)

class User < ActiveRecord::Base

before_create :calculate_age



def calculate_age
   self.age= Time.now - self.birthday # do calculate yourself, I don't know your parameters
end

答案 4 :(得分:0)

你需要保存它。应该在DOB列的运行时计算年龄。