0

現在、モデルでカスタムメソッドを作成しようとしています。使用される条件は、has_manyアソシエーションの条件です。私がこれまでに持っている方法は次のとおりです。

class Dealer < ActiveRecord::Base

  has_many :purchases

  def inventory
    inventory = Vehicle.where(:purchases => self.purchases)
    return inventory
  end

end

Vehicle has_many:purchasesがあるため、これは機能していません(したがって、車両モデルには「purchases」列がありません)。この種のクエリの条件として、Vehicle.purchases配列を使用するにはどうすればよいですか?

さらに複雑なことに、has_manyも多態性であるため、.join(:purchases)VehiclePurchaseモデルがないため、クエリで要素を単純に使用することはできません。

編集:明確にするために、私の購入モデルと車両モデルの関連部分は以下のとおりです。

class Purchase < ActiveRecord::Base
  attr_accessible :dealer_id, :purchase_type_id

  belongs_to :purchase_item_type, :polymorphic => true

end

class Vehicle < ActiveRecord::Base

  has_many :purchases, :as => :purchase_item_type

end
4

2 に答える 2

0
class Dealer < ActiveRecord::Base
  def inventory
    Vehicle.where(:id => purchases.where(:purchase_item_type_type => "Vehicle").map(&:purchase_item_type_id))
  end
end

または:

  def inventory
    purchases.includes(:purchase_item_type).where(:purchase_item_type_type => "Vehicle").map(&:purchase_item_type)
  end
于 2012-08-12T09:35:17.003 に答える
0

Vehicleモデルの:sourceオプションと:source_typeオプションを使用してこれを行うことができました。これにより、ポリモーフィックな親を関連付けることができます。

于 2012-08-22T08:58:47.740 に答える