Rails 4.2 STI //错误的转换(Superclass而不是Subclass)

时间:2016-08-11 11:12:53

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord single-table-inheritance

我试图在我的Rails应用程序中实现STI模式,我会变得疯狂。

我有三种模式:

超类:

class Reservation < ActiveRecord::Base
    self.inheritance_column = :inheritance_type

    #some code here
end

子类:

class ApartmentReservation < Reservation
    #some code here
end

class StorageReservation < Reservation
    #some code here
end

我想获得一个Subclass实例,调用Superclass,例如

Reservation.all应返回ApartmentReservation和StorageReservation的集合,但它会返回Reservation的集合。

我一直在寻找答案,我发现它是因为开发环境中的负载急剧。根据建议,我一直在尝试使用这些代码部分:

在初始化程序中:

Rails.configuration.to_prepare do
  require_dependency 'app/models/apartment_reservation'
  require_dependency 'app/models/storage_reservation'
end

在超类中:

def self.descendants
    [ApartmentReservation, StorageReservation]
end

在超类的底部:

require_dependency 'app/models/apartment_reservation'
require_dependency 'app/models/storage_reservation'

但它仍然无效。

有没有人知道,如何让它发挥作用?

这涉及rails server,但在rails console中,一切正常。

1 个答案:

答案 0 :(得分:0)

我找到了问题的根源。我在Superclass中有两个类方法,它们影响了STI行为。移除/移动这些方法后,转换工作正常。有谁有任何想法,为什么?

这些方法:

.tablesorter {
margin: -5px 0 0 0;   
table-layout: fixed;
}

 .tablesorter td{
 margin: 0;
 padding: 0;
border-bottom: 1px dotted #ccc;    
} 

 .tablesorter thead tr { 
 height: 34px;
 color:#082B33;;
 background:#B5E5EF;
text-align: left;
cursor: pointer;   
}