0

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

これを機能させることは可能ですか?

4

1 に答える 1

1

で定義した関連付けにより、クラスの一部のshopインスタンスに対してメソッドが存在します。モデルにメソッドが定義されていないため、エラーが発生します。Managerbelongs_topremium_shopManagerNilClass

クラスに対してそのような関連付けを定義する場合はPremiumShop、これを明示的に指定する必要があります。

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

必要に応じて、「rails single table inheritance」の調査を検討することもできます。

于 2012-11-26T22:57:09.967 に答える