ActiveRecord, has_many, полиморфный и STI - PullRequest
0 голосов
/ 10 мая 2010

Я столкнулся с проблемой при работе с 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, кто-нибудь может мне помочь?

Ответы [ 2 ]

4 голосов
/ 11 мая 2010

Если класс Base является абстрактной моделью, вы должны указать это в определении модели:

class Base < ActiveRecord::Base
  self.abstract_class = true 
end 
0 голосов
/ 10 мая 2010

Есть ли в вашей таблице подписок столбец типа? Я предполагаю, что Rails считает, что Base / Subscription являются моделями STI. Таким образом, когда строка извлекается из таблицы подписок, а столбец type отсутствует, по умолчанию используется родительский класс Base. Просто предположение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...