1

Rails アプリケーションの一部をエンジンに抽出しています。エンジンには、エンジンがマウントされているアプリケーションのモデル クラスとの関係を持つモデル クラスが含まれています。場合によっては、それらの関係が必要になります。

module Carrier
  class Profile < ActiveRecord::Base
    attr_accessible :company_id
    belongs_to :company, class_name: Carrier.company_class_name
    validates :company, presence: true
  end
end

エンジンにはクラスがないため、Company開発中にこの関係をどのように処理する必要がありますか? 外部クラスを「スタブ」するために他の人は何をしますか?

4

2 に答える 2

2

必要なクラスのエンジンでモデルを作成します (Company例)。

module Carrier
  class Company < ActiveRecord::Base
  end
end

エンジン内のダミー アプリでのみ実行される移行を追加します。

class CreateCarrierCompanies < ActiveRecord::Migration
  def change
    if Rails.application.class.parent_name == "Dummy"
      create_table :carrier_companies do |t|
        t.timestamps
      end
    end
  end
end

エンジン モジュールで およびその他のメソッドを作成してmattr_accessor、開発ではスタブ化されたクラスを使用し、それ以外では定義済みのクラスを使用するようにします。

module Carrier
  mattr_accessor :company_class_name
  def self.company_class_name
    @@company_class_name || "Carrier::Company"
  end
  def self.company_class
    company_class_name.constantize
  end  
end

company_class_nameエンジンがマウントされているときに が設定されていない場合は、例外を発生させることができます。

于 2012-11-25T14:28:03.517 に答える
1

メインアプリケーションの移行とモデルについては、ダミーアプリで移行をコピーし、ダミーアプリで同じモデルの空のモデルを定義します。

于 2012-11-25T15:50:56.460 に答える