7

我会知道是否有办法在一个文件中包含两个或模型模型类。

这是一个简单且非常基本的示例:

dia_actividad.rb

class DiaActividad < ActiveRecord::Base

    self.table_name =  "dbo.DIAACTIVIDAD"
  self.primary_keys = :CASINO_ID, :DIAACTIVIDAD_ID

  attr_accessible :CASINO_ID, :DIAACTIVIDAD_ID, :DFECHAHORAINICIO, :ESTADODIA_ID

  belongs_to :dia_actividad_estado, :foreign_key => :ESTADODIA_ID

end

dia_actividad_estado.rb

class DiaActividadEstado < ActiveRecord::Base

    self.table_name =  "dbo.ESTADODIA"
  self.primary_key = :ESTADODIA_ID

  attr_accessible :ESTADODIA_ID, :CESTADODIA

end

我想要一个这样的文件:

  class DiaActividad < ActiveRecord::Base

        self.table_name =  "dbo.DIAACTIVIDAD"
      self.primary_keys = :CASINO_ID, :DIAACTIVIDAD_ID

      attr_accessible :CASINO_ID, :DIAACTIVIDAD_ID, :DFECHAHORAINICIO, :ESTADODIA_ID

      belongs_to :dia_actividad_estado, :foreign_key => :ESTADODIA_ID

    end

    class DiaActividadEstado < ActiveRecord::Base

        self.table_name =  "dbo.ESTADODIA"
      self.primary_key = :ESTADODIA_ID

      attr_accessible :ESTADODIA_ID, :CESTADODIA

    end

两个类在一个文件中。但我得到未初始化的常量错误。当 ai 试图引用 DiaActividadEstado 时。

有没有办法做到这一点?

提前致谢

4

3 回答 3

5

我强烈建议不要这样做。在一个名称与类名不对应的文件中定义模型会破坏 Rails 的自动加载机制(即,每当您找到未定义的常量时,需要相应的文件,并希望在那里找到定义。

如果你真的坚持这样做,至少在某处配置“自动加载”,(阅读这里http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.html了解更多信息),所以缺少的类在正确的位置搜索(自动加载覆盖 rails “smart” 需要)。

于 2012-10-17T00:34:33.440 回答
1

另一种选择是使用模块,比如说dia.rb

module Dia
  class Actividad < ActiveRecord::Base
    ...
    belongs_to :actividad_estado, :foreign_key => :ESTADODIA_ID
  end

  class ActividadEstado < ActiveRecord::Base
    ...
  end
end

然后,你必须使用Dia::ActividadEstado等等。

虽然最初的问题有一个 rails 3 的标签,但我在使用 rails 4 并试图实现同样的事情时偶然发现了它。所以我不确定这是否适用于rails 3。

于 2014-10-14T23:57:39.707 回答
0

您如何在运行时创建类。

请参阅此代码片段http://dzone.com/snippets/create-classes-runtime并让我们知道它是否有帮助

于 2012-10-16T19:37:17.803 回答