2015-09-16 36 views
3

對於常規方法,我可以撥打obj.method(:name).source_location,這很好用,但是如果我爲關聯做這些工作,則source_location會指向.../activerecord-4.2.0/lib/active_record/associations/builder/association.rb有什麼關聯關係?如何在rails中找到關聯的源位置

我與Spree正與一幫擴展的和有地方可以定義太多的地方,我可以grep我的方式,但不知道是否有像source_location

+1

我很確定關聯方法是動態生成的,IOW,他們沒有*源*位置,僅僅因爲他們沒有「源代碼」! –

+0

我試圖拍攝的是定義關聯的文件,任何在spree中的擴展都可以添加關聯,因此不像打開模型定義並查看它:) – geermc4

回答

2

有一個直接的方式是一種方法reflect_on_association,它可能會幫助你。

Customer.reflect_on_association(:accounts).class_name #=> Account 
klass = 'Account'.constantize 
klass.method(:my_method).source_location 
+0

不完全,該關聯可能是'has_one'並沒有在其他類中定義,但是,謝謝,有幫助 – geermc4

+2

@ geermc4如果它是一個has_one,那麼帳號的單一形式應該這樣做,對吧? ;) – Ninigi

+0

*可能*一個has_one只是猜測,因爲我還沒有找到它,同樣,相關的類不響應的方法 – geermc4