7

1つのファイルに2つまたはモデルモデルクラスを含める方法があるかどうかはわかります。

単純で非常に基本的な例を次に示します。

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

1つのファイル内の2つのクラス。しかし、初期化されていない定数エラーが発生します。aiがDiaActividadEstadoを参照しようとしているとき。

それを行う方法はありますか?

前もって感謝します

4

3 に答える 3

5

これを行わないことを強くお勧めします。クラス名に対応しない名前のモデルをファイルに定義すると、Railsの自動ロードメカニズムが機能しなくなります(つまり、未定義の定数が見つかった場合は、対応するファイルが必要であり、そこで定義を見つけたいと考えています。

本当にそうすることを主張する場合は、少なくとも「自動ロード」をどこかに設定してください(詳細については、 http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.htmlを参照してください)。正しい場所で検索されます(autoloadは「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

元の質問にはレール3のタグが付いていますが、レール4を使用して同じことを達成しようとしているときに、この質問に遭遇しました。したがって、それがRails3で機能するかどうかはわかりません。

于 2014-10-14T23:57:39.707 に答える
0

実行時にクラスを作成するのはどうですか。

このコードスニペットhttp://dzone.com/snippets/create-classes-runtimeを参照して、役立つかどうかをお知らせください

于 2012-10-16T19:37:17.803 に答える