rails HABTM与视图(formtastic)

时间:2010-03-29 19:36:16

标签: ruby-on-rails has-and-belongs-to-many

我有两种模式:

模型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

问题是:使用不同的foreign_keys将两个belongs_to添加到同一个类是正确的吗?我尝试了所有组合:

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

但没有成功......我做错了什么?

1 个答案:

答案 0 :(得分: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