我正在使用一個rails-2.3應用程序,它使用composed_of創建知道如何對地址進行自我編碼的Address類。這一切都很好,但是給定一個有地址的加載模型,當我更改模型中地址組成的字段時,地址實例既不會自動更改也不會自動重新創建,而且我恐怕無法找出最強有力的方式來實現這一目標。如何使composit值對象更新或當其字段更改時重新創建它自己?
型號代碼很簡單:
class Model < ActiveRecord::Base
composed_of :address, :mapping => [%w(address1 address1), %w(address2 address2), %w(city city), %w(state state), %w(postal_code postal_code), %w(country_code country), %w(longitude lng), %w(latitude lat)]
end
有什麼建議?
我隨後回答了這一點,但已經不能回答我的問題,所以這裏有雲:
事實證明,composed_of創建有一個(無證)force_reload參數讀取方法。我利用這一點,並創建存取方法爲每個組成字段:
composed_of :address, :mapping => ADDRESS_MAPPING
ADDRESS_MAPPING.each do |field, composed_field|
next if %w(latitude longitude).include?(field)
define_method "#{field}=" do |value|
self[field] = value
if send("#{field}_changed?")
self[:longitude] = nil
self[:latitude] = nil
address(true)
end
end
end
這是一個有點做作,但它的作品。
我可能會看到有關此因素的變化?檢查基於composer_of reader的方法。
剛編輯我的答案,我喜歡挑戰;) – apneadiving 2011-04-26 20:15:49