1

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

4

5 回答 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 回答