我有一个类,比如说Car,我从它继承了类Black和Red,如下所示:
class Car::Black < Car
end
class Car::Red < Car
end
现在,还有另一个类,比如说CarPurchase,它有许多两种类型的汽车,其关联如下:
# In Black and Red models:
has_many :car_purchases, as: :purchasable, dependent:destroy
# In CarPurchase model:
belongs_to :purchasable, polymorphic: true
现在,我尝试保存CarPurchases,如下所示:
black_car.car_purchases.new() # black_car is an object of class Car::Black
我的数据库有一个名为purchasable_type的列。问题是记录保存时的purchasable_type为“Car”,而不是“Car::Black”。我在创建记录时也尝试显式保存purchasable_type。没有成功。请帮助。
1条答案
按热度按时间cgvd09ve1#
你可以这样做:
它存储
Car
的原因在ActiveRecord::Associations::BelongsToPolymorphicAssociation#replace_keys
摘录中定义:和
ActiveRecord::Inheritance::ClassMethods::base_class
摘录:因此,如果
Car
是abstract_class
,则它将存储Car::Black
,否则base_class
将解析为Car
。将Car
变为abstract_class
不会失去大部分魔力,例如,Car::Black
仍然知道它是table_name
。警告使用
Car
作为abstract_class
意味着它不能直接示例化。例如: