1

我無法弄清楚如何使這項工作;我看過其他SO問題,包括this onethis one,但無濟於事。Rails has_many:通過:使用STI的表的關聯

這裏是我的模型:

class User < ActiveRecord::Base 
    has_many :connections 
    has_many :data_sources, through: :connections 
end 

class Connection < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :data_source 
end 

class DataSource < ActiveRecord::Base 
    has_many :connections 
    has_many :users, through: :connections 
end 

class AdNetwork < DataSource 
end 

class Marketplace < DataSource 
end 

廣告網絡,賣場和DataSource全部通過STI使用相同的表。

我想建立其回報User稱爲marketplacesad_networks協會所有data_sources其中type分別是MarketPlaceAdNetwork。我怎樣才能做到這一點?


事情我已經試過了沒有工作:

class User 
    has_many :marketplaces, through: :data_sources # Throws an error 
    has_many :marketplaces, through: :connections # Throws an error 
    has_many :marketplaces, through: :connections, source: :data_source # Returns ALL data sources, not just Marketplaces 
    has_many :marketplaces, { through: :connections, source: :data_source }, -> { where(type: "Marketplace" } # Again this returns ALL data sources. Wtf??? 
end 

我也嘗試添加一列data_source_typeConnection並添加以下行

類連接 belongs_to的: data_source,polymorphic:true
end

類的DataSource 的has_many:連接,如:DATA_SOURCE 端

類用戶 的has_many:商場,通過:連接,源:DATA_SOURCE,SOURCE_TYPE: 「市場」 端

...但現在#marketplaces返回一個空關係。 (它看起來像data_source_type總是被設置爲DataSource,即使當我添加一個市場或AdNetwork。)

我做錯了什麼?

回答

0

我正在做類似的事情。我認爲答案在於你的模型屬性。

我解決了這個問題,當時我意識到我在連接表中省略了引用id(類似於連接表)。

見參考文獻:http://guides.rubyonrails.org/association_basics.html#the-has-one-through-association

你有沒有找到一個解決辦法?

+3

「爲鏈接提供上下文」和「始終引用重要鏈接中最相關的部分,以防目標網站無法訪問或永久脫機」 - 從[幫助中心](http://stackoverflow.com/幫助/如何到結果) – mkobit