我无法弄清楚如何使这项工作;我查看了其他SO问题,包括this one和this one,但无济于事。
以下是我的模特:
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
AdNetwork,Marketplace和DataSource都通过STI使用相同的表格。
我想在名为User
和marketplaces
的{{1}}上设置关联,返回ad_networks
data_sources
type
或MarketPlace
的所有AdNetwork
分别为{1}}。我怎么能这样做?
我尝试过的不起作用的事情:
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
端
类DataSource has_many:connections,as :: data_source 端
类用户 has_many:marketplaces,through :: connections,source :: data_source,source_type:&#34; Marketplace&#34; 端
...但现在#marketplaces
返回一个空关系。 (看起来data_source_type
始终设置为DataSource
,即使我添加市场或AdNetwork也是如此。)
我做错了什么?
答案 0 :(得分:0)
我正在做类似的事情。我认为答案在于你的模型属性。
当我意识到我在连接表上遗漏了引用ID(类似于你的连接表)时,我解决了这个问题。
参见参考:http://guides.rubyonrails.org/association_basics.html#the-has-one-through-association
您找到了解决方案吗?