拳有點背景時選擇唯一行: 我使用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怎麼樣 - 我擔心它也會干擾這個。