2012-07-09 96 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