2012-07-09 98 views
1

我目前正試圖建立一個模型結構,看起來很簡單,但我還沒有完全弄明白。Rails - 多態關聯連接表

我有一個模型payment,可能屬於customersupplier(它們都可以有很多payments)。

我的問題是我是否需要手動創建一個接口表來允許這個,或者如果聲明多態關聯會爲我做這個?

例如我有:

class Payment < ActiveRecord::Base 
    belongs_to :payment_originator, :polymorphic => true 
end 

class Customer < ActiveRecord::Base 
    has_many :payments, :as => :payment_originator 
end 

class Supplier < ActiveRecord::Base 
    has_many :payments, :as => :payment_originator 
end 

這是否夠用,還是我還需要使用生成器手動創建payment_originator模型?

謝謝!

+0

你的類名應該大寫。如果沒有實際存在的PaymentOriginator模型,您應該可以毫無困難地執行'Customer.payments << Payment.new(...)'或'Supplier.payments << Payment.new(...)'。 – deefour 2012-07-09 16:56:48

+0

謝謝,我編輯了他們 - 直接打字作爲例子,而不是從應用程序複製它們,並錯過了。 – 2012-07-09 17:50:32

回答

2

就模型而言,這已經足夠好了。您只需將:payment_originator_type:payment_originator_id遷移到付款表。您在上面定義的關聯會自動爲您填寫。

+0

感謝您的支持 - 所以在我的頭腦中清楚地表明,如果我對付款表進行了直接的SQL查詢,那麼我會在客戶付款的payment_originator_type列中看到類似「customer」的內容?只是想清楚這個專欄是什麼,所以我記得它將來的工作方式。 – 2012-07-09 17:49:27

+0

是的,_type列存儲一個表示類名的字符串。請參閱:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations。 – cdesrosiers 2012-07-09 18:13:44