Active Record Rails继承 - 基于类型的自动类型转换

时间:2016-09-28 14:40:42

标签: ruby-on-rails activerecord multiple-inheritance

我的方案

- >用户有很多机器

- >机器可以有5种类型

- >每种机器类型都有自己的处理机制。

- >我想使用type列来查看此行所属的类。 (Rails继承方法),如此链接Link中所述。

我的问题

- >从数据库访问机器,例如machine = Machine.first

- >然后调用machine.process(应根据此机器的类型调用此进程方法)。 (我期待这里有一些类型的铸造。)

注意:每种机器类型的流程实现都与其他机器类型不同,并且在自己的类中实现。

我想知道实现这个的最佳方法。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以使用具有个人逻辑的公共逻辑和子类来实现父类Machine

rails g model machine type:string customer_id:integer
mkdir app/models/machines
touch app/models/machines/bmw.rb
touch app/models/machines/renault.rb
...

应用程序/模型/ machine.rb

class Machine < ActiveRecord::Base
  belongs_to :customer
  ...
  def country
    raise NotImplementedError
  end
end

应用程序/模型/设备/ bmw.rb

class Bmw < Machine
  ...
  def country
    :germany
  end
end

应用程序/模型/设备/ opel.rb

class Renault < Machine
  ...
  def country
    :france
  end
end

例如:

  • First bmw Bmw.first
  • 首先是任何车Machine.first
  • 首先获得雷诺客户Renault.first.customer
  • 国家任何车辆Machine.all.sample.country,此方法将从任何子类调用。

答案 1 :(得分:0)

经过一段时间的谷歌搜索后,我可以找出一颗给我正好想要的宝石。

active_record-acts_as宝石。

我认为有用的其他链接是:

Link1

Link2

Link3