ruby active_record-acts_as gem:从父实例中获取正确的子项

时间:2016-01-20 21:13:58

标签: ruby-on-rails inheritance dynamic polymorphism

我正在使用active_record-acts_as gem来实现多表继承。我的情景:

class Vehicle < ActiveRecord::Base
   actable
end

class Plane < ActiveRecord::Base
    acts_as :Vehicle
end

class Train < ActiveRecord::Base
    acts_as :Vehicle
end

每当我创建一个Plane或Train实例时,都会创建一个相应的Vehicle。

我正在开发一个API,因此在列出Vehicle时,我将返回Vehicle模型中的字段。然而,当我收到GET / Vehicles / 1时,我想要返回实际车辆,无论是飞机,火车等等。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

class VehiclesController
  def show
    @vehicle = Vehicle.find(params[:id]).specific
  end 
end

由于Plane和Train都“延伸”MTI意义上的车辆,你可以通过查询Vehicle获得记录。 .specific为您提供实际的Plane或Train实例,而不是父类型。