我正在为我的应用程序使用单表继承。我的多态类型是维护,现在只有一个子类型,名为 OilChange。我在控制器的 create 方法中创建记录时遇到问题。这是代码。
@log = Log.new(params[:log])
@log.maintenance = Maintenance.new(params[:maintenance])
params[:maintenance] 散列有键 {:name, :type}。我可以通过如下打印它们来验证它们的存在和值
print params[:maintenance][:name]
print params[:maintenance][:type]
如果我为 :type 键的值传入“OilChange”,则维护记录的类型是维护而不是 OilChange。我可以通过在 REPL 控制台中查找记录来验证这一点。类型字段为零。通过添加以下行,我可以让它像我想要的那样工作。
@log.maintenance.type = params[:maintenance][:type]
但这很丑陋。我想知道的是为什么 create 方法没有像 name 字段那样设置 type 字段?
您在我的 schema.rb 中看到的两种类型如下所示
create_table "logs", :force => true do |t|
t.date "date"
t.text "description"
t.string "title"
t.string "summary"
t.integer "car_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "maintenance_id"
t.integer "mileage"
end
create_table "maintenances", :force => true do |t|
t.string "name"
t.string "type"
t.datetime "created_at"
t.datetime "updated_at"
t.string "oil_brand"
t.string "oil_type"
t.string "oil_filter_type"
我的模型看起来像这样。
class Log < ActiveRecord::Base
belongs_to :car
has_and_belongs_to_many :tags
belongs_to :maintenance
end
class Maintenance < ActiveRecord::Base
has_one :log
end
class OilChange < Maintenance
end
蒂亚!