1

ユーザーはプロフィールを保存する前に生年月日を入力する必要があります。また、プロファイル テーブルに age 列があります。しかし、ユーザーが生年月日と年齢を入力する必要はありません。誕生日に基づいてユーザーの年齢を計算する方法は既にあります。問題は、計算されたユーザーの年齢をデータベースに保存するにはどうすればよいですか?

4

5 に答える 5

5

データベースに保存せず、アプリケーションで必要なときに計算することをお勧めします。

DBに保存すると、値が更新されずに古くなるリスクがあります。

于 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_saveas it will be fire on createandを使用する必要があり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ファイルに関数を書くだけです。その値を隠しフィールドの1つに入れます。その隠しフィールドを使用して、年齢を 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);
}
于 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 に答える