2010-05-10 6 views
0

Я пришел в проблему при работе с AR и полиморфные, вот описание,ActiveRecord, has_many, полиморфные и ИППП

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

Базовый класс имеет свою собственную таблицу или это абстрактный класс? –

+0

@ Vlad Zloeanu, класс Base не имеет своей таблицы, это всего лишь ребенок ActiveRecord :: Base – leomayleomay

ответ

4

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

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

В таблице подписок есть столбец типа? Я предполагаю, что Rails считает, что Base/Subscription - это модели STI. Поэтому, когда строка извлекается из таблицы подписчиков, и столбцы «type» не присутствуют, она по умолчанию используется родительским классом Base. Просто думаю ...

+0

Я добавил столбец с именем 'type' to 'Subscription' и создал сообщение с ним, не повезло, subscriptable_type все еще 'Base', но' Subscription' – leomayleomay

+0

это тестовый комментарий – brentmc79

Смежные вопросы