Наследование модели активной записи в Ruby on Rails

Я надеялся, что смогу унаследовать модель ActiveRecord и использовать подкласс так же, как родительский класс. Похоже, это не так, отношения AR не работают для подкласса.

class Manager < User
  belongs_to :shop
end

class Shop < ActiveRecord::Base
  has_many :managers
end

class PremiumShop < Shop
end

а также

@premium_shop = manager.shop # Finds the shop.
@premium_shop = manager.premium_shop # Does not find the shop, NilClass:Class error

Можно ли сделать эту работу?


person pingu    schedule 26.11.2012    source источник


Ответы (1)


Метод shop существует для некоторого экземпляра класса Manager из-за ассоциации, которую вы определили через метод belongs_to. У вас нет метода premium_shop, определенного в вашей модели Manager, поэтому возникает ошибка NilClass.

Если вы хотите определить такую ​​ассоциацию для класса PremiumShop, вы должны указать это явно.

belongs_to :premium_shop, class_name: "PremiumShop", foreign_key: :shop_id

В зависимости от ваших потребностей вы также можете рассмотреть возможность исследования «наследование одной таблицы rails».

person deefour    schedule 26.11.2012
comment
Я не думаю, что вам нужно class_name: "PremiumShop" в этом случае, это догадывается из названия ассоциации :premium_shop, или? - person 244an; 27.11.2012