составе в Rails - когда его использовать? - PullRequest
18 голосов
/ 27 апреля 2010

Когда вы должны использовать метод класса ActiveRecord composed_of?

Ответы [ 2 ]

22 голосов
/ 27 апреля 2010

лично, я думаю, что это полезно, когда у вас есть объекты, которые не хранятся в базе данных, как показано в базе данных, например, температура, местоположение GPS, баланс и т. д.

Вы можете спросить, почему они не хранятся в базе данных? В базе данных мы храним только значение, но если мы хотим добавить к этому значению полезные релевантные методы,

например,

  1. в случае температуры нам могут понадобиться такие методы, как to_fahrenheit, to_celsius, is_boiling_point? и т. Д.

  2. в случае определения местоположения GPS нам могут понадобиться такие методы, как distance_from(point), route_to(point) и т. Д.

, так что это довольно полезно, когда мы можем просто создать классы для этих объектов и использовать Comm_of для инициализации этих объектов на лету

надеюсь, это поможет =)

3 голосов
/ 12 ноября 2011

Более сложный пример использования composed_of с Деньгами :

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 .

...