用户需要在保存他的个人资料之前输入他的生日。我在配置文件表中也有一个年龄列。但我不希望用户必须填写他的出生日期和年龄。我已经有一种方法可以根据用户的生日计算用户年龄。问题是如何在计算后将用户年龄保存在数据库中?
问问题
3138 次
5 回答
5
我建议您不要将其保存在数据库中,在应用程序需要时计算它。
如果您将其保存在数据库中,那么您可能会冒着它们变老而没有更新值的风险!
于 2013-03-20T09:53:38.693 回答
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
但是,我建议你看看这篇文章,因为有一些关于闰年的问题,你可能想调整你的age
方法。
编辑-无论如何,如果您有充分的理由age
在表格中添加该列,则应该使用before_save
它,因为它将在create
和上触发update
。
class User < ActiveRecord::Base
attr_accessible :dob, :age
before_save :set_age
def set_age
self.age = Time.now.year - self.dob.year
end
end
于 2013-03-20T10:39:12.430 回答
1
在 HTML 页面的应用程序中,使用 java-script 函数可以通过 jquery - date 方法计算用户的年龄。
calculate_age()
只需在 JS 文件中编写一个函数即可。并将该值放在隐藏字段之一中。您可以使用该隐藏字段将年龄存储在数据库中。
在您正在收集出生日期的那个输入框中,只需编写 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);
}
于 2013-03-20T09:55:32.907 回答
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
于 2013-03-20T10:12:58.000 回答
0
你确实需要保存它。年龄应在运行时从 DOB 列计算。
于 2013-03-20T09:52:30.887 回答