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_type
为Base
但Subscription
,任何人都可以给我一个手呢?
如果该类Base
是一个抽象的模型,您必须指定在模型中定义:
class Base < ActiveRecord::Base
self.abstract_class = true
end
您的订阅表是否有'类型'列?我猜Rails认为Base/Subscription是STI模型。因此,当从订阅表中检索行并且不存在“类型”列时,它只是默认为基类的父类。只是一个猜测...
我在'Subscription'中添加了一个名为'type'的列,并且创建了一个帖子,没有运气,subscriptable_type仍然是'基地',但'订阅' – leomayleomay 2010-05-11 01:06:04
这是一个测试评论 – brentmc79 2011-02-01 20:12:04
阶级基础有其表或者是一个抽象类? – 2010-05-10 13:31:46
@Vlad Zloeanu,类Base没有自己的表,它只是ActiveRecord :: Base的一个子代 – leomayleomay 2010-05-10 13:58:35