我目前正在尝试在模型上创建自定义方法,其中使用的条件是has_many关联的条件。我到目前为止的方法是:
class Dealer < ActiveRecord::Base
has_many :purchases
def inventory
inventory = Vehicle.where(:purchases => self.purchases)
return inventory
end
end
这不起作用,因为Vehicle has_many:购买(因此车辆模型上没有列“购买”)。如何在这种查询中使用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
答案 0 :(得分: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
答案 1 :(得分:0)
我能够使用Vehicle模型上的:source和:source_type选项来实现这一点,它允许多态父项关联。