从模型继承并更改 table 用于 Rails 3 中的所有目的

Inherit from a model and change table for all purposes in Rails 3

我有一个 Class 定义了一个已打开的工单,另一个定义了已关闭的工单:

class Ticket < ActiveRecord::Base
  [validations]
  [callbacks]
end

class ClosedTicket < Ticket
  self.table_name = "closed_tickets"
end

并且我想把关闭的票移到closed_ticketstable。但是当模型执行验证时,它确实使用超类 table 名称,因此它们失败了。

ClosedTicket.table_name => "closed_tickets"
ClosedTicket.create(Ticket.first.attributes)
Ticket Exists (0.8ms)  SELECT 1 AS one FROM `tickets` WHERE...
=> ["ID has already been taken"]

ClosedTicket.table_name => "closed_tickets"
closed_ticket = ClosedTicket.new(Ticket.first.attributes)
closed_ticket.save
Ticket Exists (0.8ms)  SELECT 1 AS one FROM `tickets` WHERE...

对于如何修复所有方法和验证的 table 名称,我没有任何线索。

ClosedTicket.table_name => "closed_tickets"
closed_ticket = ClosedTicket.new(Ticket.first.attributes)
closed_ticket.save

最后做了两个模型,把所有常用的方法都抽象成一个模块,组合成两个模型。对于这个问题,我找不到更好的解决方案。