我在使用AR和多态时遇到了问题,这是描述,
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
,有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
如果类Base
是抽象模型,则必须在模型定义中指定:
class Base < ActiveRecord::Base
self.abstract_class = true
end
答案 1 :(得分:0)
您的订阅表是否有“类型”列?我猜Rails认为Base / Subscription是STI模型。因此,当从订阅表中检索到一行并且不存在“类型”列时,它只是默认为Base的父类。只是一个猜测...