2011-09-20 57 views
1

我有與多態關聯的一些問題在Rails的3.我的模型態關聯看起來是這樣的:問題與在子類中

class Address < ActiveRecord::Base 
    belongs_to :contactable, :polymorphic => true 
end 

class OrganisationUnit < ActiveRecord::Base 
    # some other associations 
end 

# Subclass of OrganisationUnit 
class Company < OrganisationUnit 
    has_one :address, :as => :contactable 
end 

現在,當我希望得到一個公司的地址時,Rails下面的SQL查詢:

SELECT `addresses`.* FROM `addresses` WHERE (`addresses`.contactable_id = 1021 AND `addresses`.contactable_type = 'OrganisationUnit') LIMIT 1 

在我看來這是錯的,因爲contactable_type應爲「公司」。 有沒有什麼辦法可以解決這個問題,或者告訴rails OrganisationUnit只是一個抽象基類?

回答

2

這是一個預期的行爲。將STI錶鏈接到多態關聯時,Rails存儲基類名稱,而不是繼承的類名稱。 STI類型轉換髮生在通過id查找對象之後。

+0

是啊,thx,你是對的,我只是改變了數據庫中的類型,現在它的工作... – krebbl

+1

@krebbl我遇到了同樣的問題。我們如何修復子類的類型? –