拳有点背景时选择唯一行: 我使用Rails 3.0.7,Postgres的9.0和MetaWhere /元搜索1.0.4做加盟
我有让当唯一的记录非常令人沮丧的问题查询我的数据库。我有3个型号如下:
class Car < ActiveRecord::Base
has_many :sellers, :through => :adverts, :uniq => true
has_many :adverts, :dependent => :destroy
end
class Seller < ActiveRecord::Base
has_many :cars, :through => :adverts, :uniq => true
has_many :adverts
end
class Advert < ActiveRecord::Base
belongs_to :car, :autosave => false
belongs_to :seller, :autosave => false
end
到目前为止好。现在我想要做的就是找到所有的汽车,那就是菲亚特熊猫的(:品牌,车型上的:model_name属性)。这很好。但是如果我想从卖家表中也加入一些信息,问题就会开始显现 - 我得到的是重复的汽车!我做的是以下几点:
Car.includes(:adverts, :sellers).where(:brand >> 'Fiat', :model_name >> 'Panda', :sellers => [:kind >> 'Dealer'])
现在你可能会说,这是不可能的,因为“应该如何分贝知道:一种从所有连接到每节车厢上的卖家选择了”但我不在乎,因为它们都是一样的,所以无论它是第一个还是最后一个卖家都是属性值。 如果我做了.debug_sql,我得到如下:
SELECT cars.*, sellers.*, adverts.* FROM cars LEFT OUTER JOIN adverts ON adverts.car_id = cars.id LEFT OUTER JOIN adverts sellers_cars_join ON cars.id = sellers_cars_join.car_id LEFT OUTER JOIN sellers ON sellers.id = sellers_cars_join.seller_id WHERE cars.brand = 'Fiat' AND cars.model_name = 'Panda' AND sellers.kind = 'Dealer'
造成这给了我复制,它提供了完美的感觉 - 但我怎么能解决呢? - 因为它不是我想要的。
我可以看到这两个可能的解决方案:首先 如果我能以某种方式在Rails样的方式得到它的执行
SELECT DISTINCT(cars.id), cars.*, sellers.*, adverts.* FROM cars LEFT....
看来,它会给我正确的事情。
第二如你所见,我已经添加了一个:uniq => true关联关系,但是,就我所见,只有在我的示例中才有效,如果我从卖家那里陈述并要求这样的汽车:
Seller.includes(:adverts, :cars).where(:cars => [:brand >> 'Fiat'], :cars => [:model_name >> 'Panda'], :kind >> 'Dealer')
但我对此一点都不确定! metawhere/metasearch怎么样 - 我担心它也会干扰这个。