我有什么:
class Map < ActiveRecord::Base
has_many :connections
end
这很好用。我还有其他两个模型,Connection
和System
。每个Connection都有一个from
属性和一个to
属性,我希望这两个属性都是System
个对象。
class Connection < ActiveRecord::Base
belongs_to :map
belongs_to :system, :class_name => "System", :foreign_key => "from"
belongs_to :system, :class_name => "System", :foreign_key => "to"
end
class System < ActiveRecord::Base
has_many :connections, foreign_key: "from"
has_many :connections, foreign_key: "to"
end
这就是我现在所处的位置。我之前认为Connection
会has_one :from, :class_name "System"
,但导致rails在System表中查找connection_id列。
但这不起作用。
@map.connections.each do |con|
con.from.name #nomethod 'name' for FixNum error here
con.to.name #nomethod 'name' for FixNum error here
end
然而,这确实有效。
@map.connections.each do |con|
System.find(con.from).name
System.find(con.to).name
end
到目前为止,我只是在努力解决这个问题,但是在事情变得复杂之前,我希望这些东西能正常关联。
答案 0 :(得分:1)
赞美太阳!!!
class Connection < ActiveRecord::Base
belongs_to :map
belongs_to :from, :class_name => "System", :foreign_key => "from"
belongs_to :to, :class_name => "System", :foreign_key => "to"
end
答案 1 :(得分:1)
为任何观察者提供此工作的原因 - 当您设置ActiveRecord associations in Rails时,您实际上正在为您的模型创建另一个方法/属性
例如,当您将关联定义为:system
时,您将能够在视图/控制器/模型中调用@object.system
。但是,这也意味着此方法被占用 - 阻止您再次使用它(否则会被覆盖)
您发现的是,调用system
和from
,而不是调用您的关联to
,您的关联将被正确处理,让您能够调用{{1 }和@object.from