1
這似乎是一個相當普遍的問題,但沒有明確的解決方案。再次重申,說我有一個模型:如何將兩個has_many關聯合併爲一個?
def Model < ActiveRecord::Base
has_many :somethings, ...
has_many :otherthings, ...
end
接下來的問題是如何增加一個第三關聯:combined
,結合兩個?我知道這可以通過:finder_sql
來完成,而類似的結果可以通過scope
來實現,但是這些都沒有給我一個實際的關聯。這樣做的意義就在於能夠與:through
和事物其用於其他關聯像Model.first.combined.some_scope.count
編輯:實際的代碼
class Donation < ActiveRecord::Base
# either Project or Nonprofit
belongs_to :donatable, :polymorphic => true
belongs_to :account
end
class Project < ActiveRecord::Base
belongs_to :nonprofit
end
class Nonprofit < ActiveRecord::Base
has_many :projects
# donations can be either direct or through a project
# the next two associations work fine on their own
# has_many :donations, :as => :donatable, :through => :projects
# has_many :donations, :as => :donatable
has_many :donations, .... # how do I get both here,
has_many :supporters, :through => :donations # for this to work?
end
感謝的相關部分。
他們是同樣的事情,已經在使用STI,但其中一人來自':through'不同的模型。在那個定製的':finder_sql'中,我使用了LEFT JOIN和一個OR子句。 – Gunchars
請更明確地說,將您的中間模型添加到原始問題中,以便每個人都可以瞭解要解決哪個問題。 – rewritten