Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > Aggregations setters


Автор: OmeZ 25.7.2008, 09:42
У меня проблема с composed_of

допустим я создаю 

Код

class Profile << ActiveRecord::Base

composed_of :phone, 
   :class_name=>'PhoneNumber', 
   :mapping=>[%w(area_code area), %w(city_code city), %(phone phone)]

end

class PhoneNumber

   def initialize(area, city, phone)
       @area, @city, @phone = area, city, phone
   end

   def to_s
       # некие действия для получения формата +xxx-xx-xxxxxx
   end

end


таким образом я имею accessor на аттрибут phone и соответственно могу делать

Код

@profile.new(:area_code=>1, :city_code=>800, :phone=>9999999)
@profile.phone #=> #PhoneNumber
@profile.phone.to_s #=> +1-800-9999999

@profile.phone = PhoneNumber.new(1, 900, 6666666)
@profile.phone.to_s #=> +1-900-6666666
@profile.area_code #=> 900
@profile.phone #=> 6666666


Собственно это то что и ожидалось, но мне так же нужно что бы при

Код

@profile.phone = "+1-111-1111111"


я получал то же самое что и при назначении 

Код

@profile.phone = PhoneNumber.new(....)


и собственные поля @profile.area_code .... обновлялись в обратную сторону тоже. Логично для этого добавить перегрузку
Код


class Profile << ActiveRecord::Base

   def phone=(something)
      # здесь делается конверсия типа
      self.phone.load_from_string(something)
   end

end


собственно это работает, но обновляются поля ТОЛЬКО объекта @profile.phone #PhoneNumber но не самого @profile # area_code etc.

в чем моя ошибка? в ДНК?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)