你需要告訴ActiveRecord它正在尋找的相關列。我猜你想有以下幾點:
class Person < ActiveRecord::Base
has_many :connection_bindings
has_many :companies, :through => :connection_bindings
has_many :people, :through => :connection_bindings
end
class company < ActiveRecord::Base
has_many :connection_bindings
has_many :companies, :through => :connection_bindings
has_many :people, :through => :connection_bindings
end
的問題有,你有兩個表將有ID的一列和Rails不知道看哪個表了。
例如,在數據庫中的任何給定connection_binding行上,connect_from可以是company_id或person_id,connect_to也是如此。所以你說:'嘿Rails,加載我關聯的ConnectionBindings',它會得到一行,connect_from是11,connect_to是12.但它做Person.find(12)或Company.find(12)?沒有辦法告訴!
相反,你得給Rails的一些信息:
class Person < ActiveRecord::Base
has_many :connection_bindings
has_many :person_connections, :through => :connection_bindings, :source => :to_connect, :source_type => 'Person'
has_many :company_connections, :through => :connection_bindings, :source => :to_connect, :source_type => 'Company
def connections
person_connections + company_connections
end
end
你需要建立一個在另一邊(以及相關的:from_connect的),但它取決於你如何'正在使用這些連接。應該足以讓你開始。
在Ruby和Rails的魔幻世界中,它的鍵入方式比您習慣的要多得多,但它卻是您嘗試構建的非常複雜的數據模式。這並不意味着它是不可能的 - Rails作爲一個好的框架不會阻止你做任何你真正想做的事情 - 但是爲了達到你的目的,需要一些明確性是不常見的。
感謝名單指着我出去。你的回答非常有幫助。我在下一個答案中爲我寫下了實際的解決方案。 – RunFor 2013-03-13 01:04:57