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