从模型继承并更改 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_tickets
table。但是当模型执行验证时,它确实使用超类 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
最后做了两个模型,把所有常用的方法都抽象成一个模块,组合成两个模型。对于这个问题,我找不到更好的解决方案。
我有一个 Class 定义了一个已打开的工单,另一个定义了已关闭的工单:
class Ticket < ActiveRecord::Base
[validations]
[callbacks]
end
class ClosedTicket < Ticket
self.table_name = "closed_tickets"
end
并且我想把关闭的票移到closed_tickets
table。但是当模型执行验证时,它确实使用超类 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
最后做了两个模型,把所有常用的方法都抽象成一个模块,组合成两个模型。对于这个问题,我找不到更好的解决方案。