-1

私は2つのモデルを持っています:

モデルNetworkObjectは、「ホスト」を記述しようとします。ソースと宛先のルールが必要なので、2つの異なるクラスを作成しても意味がないため、同じクラスの両方のオブジェクトを使用しようとしています。

class NetworkObject < ActiveRecord::Base
  attr_accessible :ip, :netmask, :name
  has_many :statements
  has_many :rules, :through =>:statements
end

class Rule < ActiveRecord::Base
  attr_accessible :active, :destination_ids, :source_ids
  has_many :statements
  has_many :sources, :through=> :statements, :source=> :network_object
  has_many :destinations, :through => :statements, :source=>  :network_object
end

HABTMを構築するために、私はモデルJOINを選択しました。したがって、この場合、Statementという名前のモデルを次のように作成しました。

class Statement < ActiveRecord::Base
  attr_accessible :source_id, :rule_id, :destination_id
  belongs_to  :network_object, :foreign_key => :source_id
  belongs_to :network_object,  :foreign_key => :destination_id
  belongs_to :rule
end

問題は次のとおりです。異なるforeign_keysを使用して2つのbelongs_toを同じクラスに追加するのは正しいですか?私は次のようなすべての組み合わせを試しました:

belongs_to :sources, :class_name => :network_object, :foreign_key => :source_id

しかし成功しません..私が間違っていることは何ですか?

4

1 に答える 1

1

アソシエーションは、使用する外部キーも知る必要があります。これに更新してみてください。私はこれを試したことがないので、うまくいくかどうか教えてください。

class Rule < ActiveRecord::Base
  attr_accessible :active, :destination_ids, :source_ids
  has_many :statements
  has_many :sources, :through => :statements, :class_name => "NetworkObject", :foreign_key => "source_id"
  has_many :destinations, :through => :statements, :class_name => "NetworkObject", :foreign_key => "destination_id"
end
于 2010-03-30T03:10:11.930 に答える