1

これはここではかなり一般的な問題のようですが、決定的な解決策はありません。もう一度言い直すと、モデルがあるとします。

def Model < ActiveRecord::Base
    has_many :somethings, ...
    has_many :otherthings, ...
end

:combined問題は、2 つを組み合わせた 3 つ目の関連付けを追加する方法です。これは で実行でき、: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

ありがとう。

4

1 に答える 1

1

SomethingOtherthingが十分に類似している場合は、STI を使用します。

def Model < ActiveRecord::Base
  has_many :somethings
  has_many :otherthings
  has_many :genericthings
end

def Genericthing < Activerecord::Base
  # put a string column named "type" in the table
  belongs_to :model
end

def Something < Genericthing
end

def Otherthing < Genericthing
end
于 2012-09-28T09:24:25.867 に答える