什么时候应该使用ActiveRecord的composed_of
类方法?
答案 0 :(得分:22)
就个人而言,我认为当您拥有未存储在数据库中的对象时,这很有用,如数据库中所示,例如:温度,gps位置,平衡等。
您可能会问为什么那些没有存储在数据库中?在数据库中,我们只存储一个值,但是如果我们想要将有用的相关方法附加到该值,
例如。
在温度的情况下,我们可能需要to_fahrenheit
,to_celsius
,is_boiling_point?
等方法
对于gps位置,我们可能需要distance_from(point)
,route_to(point)
等方法
所以当我们可以为这些对象创建类,并使用composed_of来动态初始化这些对象时,它非常有用
希望它有帮助=)
答案 1 :(得分:3)
如何将composed_of
与Money一起使用的更复杂的示例:
composed_of :price,
:class_name => "Money",
:mapping => [%w(cents cents), %w(currency currency_as_string)],
:constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
:converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }
来源:github wiki。