Рельсы HABTM против вида (formtastic) - PullRequest
0 голосов
/ 29 марта 2010

У меня есть две модели:

Модель NetworkObject попробуйте описать "хостами". Я хочу иметь правило с источником и назначением, поэтому я пытаюсь использовать оба объекта из одного класса, так как не имеет смысла создавать два разных класса.

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

Проблема в следующем: правильно ли добавлять два принадлежащих к одному классу с использованием разных иностранных ключей? Я перепробовал все комбинации как:

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

но безуспешно ... что-то, что я делаю не так?

1 Ответ

1 голос
/ 30 марта 2010

Ассоциации также должны знать, какой внешний ключ использовать. Попробуйте обновить его до этого. Я не пробовал это, поэтому дайте мне знать, если это работает или нет.

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
...