Rails中的composed_of - 什么时候使用它?

时间:2010-04-27 02:35:15

标签: ruby-on-rails activerecord aggregate composite

什么时候应该使用ActiveRecord的composed_of类方法?

2 个答案:

答案 0 :(得分:22)

就个人而言,我认为当您拥有未存储在数据库中的对象时,这很有用,如数据库中所示,例如:温度,gps位置,平衡等。

您可能会问为什么那些没有存储在数据库中?在数据库中,我们只存储一个值,但是如果我们想要将有用的相关方法附加到该值,

例如。

  1. 在温度的情况下,我们可能需要to_fahrenheitto_celsiusis_boiling_point?等方法

  2. 对于gps位置,我们可能需要distance_from(point)route_to(point)等方法

  3. 所以当我们可以为这些对象创建类,并使用composed_of来动态初始化这些对象时,它非常有用

    希望它有帮助=)

答案 1 :(得分:3)

如何将composed_ofMoney一起使用的更复杂的示例:

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