2012-03-21 78 views
0

鑑於這種類設置:導軌 - 確定什麼一個對象的屬性是由一個二傳手

class MyModel < ActiveRecord::Base 
    belongs_to :association1 
    belongs_to :association2, :polymorphic => true 
end 

我知道,當我設置association1,它設置association1_id到對象的ID 1

m = MyModel.new 
m.association1 = object1 
#<MyModel id: nil, association1_id: 1, association2_id: nil, association2_type: nil> 

我知道,當我設置association2,它集association2_id和association2_type

m.association2 = object2 
#<MyModel id: nil, association1_id: 1, association2_id: 2, association2_type: 'ClassType'> 

我的問題是:

是否有一個函數可以很容易地告訴我什麼信息以散列形式設置在一個對象上?

MyModel.magic_function(:association1, object1) 
# returns {:association1_id => 1} 
MyModel.magic_function(:association2, object2) 
# returns {:association2_id => 2, :association2_type => 'ClassType'} 

回答

0

這是權宜的解決方案我現在,只是雖然我會分享:

def self.magic_method(association, object) 
    instance = self.new 
    instance.send(association, object) 
    h = Hash.new 
    instance.changes.each do |k,v| 
    h[k] = v[1] 
    end 
    h 
end 

這是內置到鐵軌的地方?

+0

這種情況可能已經編輯你的問題,而不是答案。 – 2012-03-21 01:06:59

2

也許你正在尋找changes

person = Person.new 
person.changes # => {} 
person.name = 'bob' 
person.changes # => { 'name' => [nil, 'bob'] } 
+0

更改很近,但我不想更改我的原始對象。我想看看會發生什麼變化,而不會實際改變我的對象。理想情況下,我根本不需要我的對象實例。 – Dave 2012-03-21 04:56:59

相關問題