ActiveRecord的,的has_many,多态和STI

问题描述:

与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

如果该类Base是一个抽象的模型,您必须指定在模型中定义:

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

您的订阅表是否有'类型'列?我猜Rails认为Base/Subscription是STI模型。因此,当从订阅表中检索行并且不存在“类型”列时,它只是默认为基类的父类。只是一个猜测...

+0

我在'Subscription'中添加了一个名为'type'的列,并且创建了一个帖子,没有运气,subscriptable_type仍然是'基地',但'订阅' – leomayleomay 2010-05-11 01:06:04

+0

这是一个测试评论 – brentmc79 2011-02-01 20:12:04