所以,我有以下内容:
class Product < ActiveRecord::Base
# Has a bunch of common stuff about assembly hierarchy, etc
end
class SpecializedProduct < Product
# Has some special stuff that a "Product" can not do!
end
有一个制造和组装过程,其中捕获有关产品的数据。在捕获时,最终的产品类型是未知的。在数据库中创建产品记录后(可能几天后),可能需要将该产品转换为专用产品并填写附加信息。然而,并非所有产品都会变得专业化。
我一直在尝试使用以下内容:
object_to_change = Product.find(params[:id])
object_to_change.becomes SpecializedProduct
object_to_change.save
然后,当我执行SpecializedProduct.all
结果集时,不包括object_to_change
. 相反object_to_change
,仍然在数据库中列为Product
UPDATE "products" SET "type" = ?, "updated_at" = ? WHERE "products"."type" IN ('SpecializedProduct') AND "products"."id" = 30 [["type", "Product"], ["updated_at", Fri, 17 May 2013 10:28:06 UTC +00:00]]
因此,在调用.becomes SpecializedProduct
该方法后,现在使用了正确的类型,但由于更新的子句过于具体.save
,它无法更新记录。WHERE
我真的需要直接访问type
模型的属性吗?我真的宁愿不要。