2010-05-10 78 views
0

與AR和多態工作時,我來到了一個問題,這裏的描述,ActiveRecord的,的has_many,多態和STI

class Base < ActiveRecord::Base; end
class Subscription < Base

set_table_name :subscriptions
has_many :posts, :as => :subscriptable

end

class Post < ActiveRecord::Base

belongs_to :subscriptable, :polymorphic => true

end

在控制檯

>> s = Subscription.create(:name => 'test')
>> s.posts.create(:name => 'foo', :body => 'bar')

,它創造了一個Post,如:
#<Post id: 1, name: "foo", body: "bar", subscriptable_type: "Base", subscriptable_id: 1, created_at: "2010-05-10 12:30:10", updated_at: "2010-05-10 12:30:10">

subscriptable_typeBaseSubscription,任何人都可以給我一個手呢?

+0

階級基礎有其表或者是一個抽象類? – 2010-05-10 13:31:46

+0

@Vlad Zloeanu,類Base沒有自己的表,它只是ActiveRecord :: Base的一個子代 – leomayleomay 2010-05-10 13:58:35

回答

4

如果該類Base是一個抽象的模型,您必須指定在模型中定義:

class Base < ActiveRecord::Base 
    self.abstract_class = true 
end 
0

您的訂閱表是否有'類型'列?我猜Rails認爲Base/Subscription是STI模型。因此,當從訂閱表中檢索行並且不存在「類型」列時,它只是默認爲基類的父類。只是一個猜測...

+0

我在'Subscription'中添加了一個名爲'type'的列,並且創建了一個帖子,沒有運氣,subscriptable_type仍然是'基地',但'訂閱' – leomayleomay 2010-05-11 01:06:04

+0

這是一個測試評論 – brentmc79 2011-02-01 20:12:04