1

これは私がやろうとしていることの簡単な例です...

オブジェクトがあるとしますPerson:

Person.blueprint do
  name
  age
end

私はこのようなことができるようにしたい:

Person.blueprint(:from_birthdate) do
  name
  age { Time.now - birthdate }
end

Person.make(:from_birthdate, :birthdate => 5.years.ago)

ただし、オブジェクトmakeの実際の属性ではない値を渡すことは許可されていません。Personブループリントに任意のオブジェクトを渡す方法はありますか?

4

1 に答える 1

0

attr_accessorfor を作成することもできますがbirthdate、それは少しばかげているようです。別のメソッドを定義する必要があるかもしれません:

def Person.make_from_birthdate(attributes)
  birthdate = attributes.delete :birthdate
  Person.make attributes.merge(:age => Time.now - birthdate)
end

ただし、年齢を保存することは一般的に悪い習慣です。年齢は時間とともに変化し、生年月日は変化しないため、通常は生年月日を DB に保存し、必要に応じて (今日の日付に基づいて) 年齢を計算します。

于 2011-10-21T21:40:42.297 に答える