ActiveRecord,has_many,多态和STI

时间:2010-05-10 11:47:08

标签: ruby-on-rails

我在使用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_typeBaseSubscription,有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

如果类Base是抽象模型,则必须在模型定义中指定:

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

答案 1 :(得分:0)

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