我無法弄清楚如何使這項工作;我看過其他SO問題,包括this one和this 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
稱爲marketplaces
和ad_networks
協會所有data_sources
其中type
分別是MarketPlace
或AdNetwork
。我怎樣才能做到這一點?
事情我已經試過了沒有工作:
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_type
到Connection
並添加以下行
類連接 belongs_to的: data_source,polymorphic:true
end
類的DataSource 的has_many:連接,如:DATA_SOURCE 端
類用戶 的has_many:商場,通過:連接,源:DATA_SOURCE,SOURCE_TYPE: 「市場」 端
...但現在#marketplaces
返回一個空關係。 (它看起來像data_source_type
總是被設置爲DataSource
,即使當我添加一個市場或AdNetwork。)
我做錯了什麼?
「爲鏈接提供上下文」和「始終引用重要鏈接中最相關的部分,以防目標網站無法訪問或永久脫機」 - 從[幫助中心](http://stackoverflow.com/幫助/如何到結果) – mkobit