2010-11-19 21 views
4
User 
has_many :posts 
has_many :post_tags, :through => :posts 

PostTag 
belong_to :post 
belongs_to :tag 
scope :distincttag, :select => ('distinct post_tags.tag_id') 

üretir aracılığıyla i geçersiz SQL almak: SEÇ post_tags *, farklı TAG_ID ...raylar - kullanılarak: (farklı) seçmek ile: has_many: dernek Raylar 3.0.4 ile geçersiz SQL

de. En az bir kişi aynı sorunu yaşadı: http://www.ruby-forum.com/topic/484938

Özellik veya hata?

sayesinde

+0

Tamam, aldırma, bu çalışır

Belki Bunu gerçekleştirmek için çalışıyoruz . Başka bir deyişle PostTag altında bir kapsam oluşturmak işe yarıyor. Ne işe yaramayan, ancak, sadece bir ".select" zincirleme: someuser.post_tags.select ('distinct tag_id') yukarıdaki hataya neden olur. "Select" öğesi birleştirme/ilişkilendirmede örtük seçimi geçersiz kılmamalı mı? – avioing

+0

'@ user.post_tags.uniq.pluck (: tag_id)' ne istediğinizi bulabilir – bdares

cevap

3

bir kapsam koymak doğru şey gibi görünmüyor.

class PostTag < ... 
    belong_to :post 
    belongs_to :tag 
    def distincttag 
    find(:all, :select => 'distinct tag_id') 
    end 
end 

Düzenleme: Şimdi ben neye ihtiyacınız biliyoruz:

User 
has_many :posts 
has_many :post_tags, :through => :posts, :select => 'distinct tags.*' 
# or, if you are not worried about database overhead: 
has_many :post_tags, :through => :posts, :uniq => true 

Referans: http://blog.hasmanythrough.com/2006/5/6/through-gets-uniq

+0

Üzgünüm, çok açık olduğunu sanmıyorum. Amaç, bir kullanıcının farklı etiketlerinin listesini almaktır. PostTag'a bir yöntem eklemek, onu bir kullanıcıya zincirledikten sonra çalışmayacaktır: someuser.post_tags.distincttag - bir hataya neden olur, çünkü post_tags bir dizi – avioing

+0

Artık görüyorum ... Cevabımı düzenledim. –

+0

Fabio, teşekkürler, ama maalesef işe yaramayacak. İlk düzenlediğiniz örnekte ": select =>" farklı etiketler kullanılıyor. * ', Ancak buradaki "etiketler. *" Tablosu, birleşimin bir parçası bile değil. "Uniq" i kullanan ikinci örnek çalışmayacaktır çünkü "post_tags" kaydının tamamında "uniq" ifadesini (post_id, tag_id) kullanırken, benzersiz "post_tags" değil, benzersiz "tags" (sadece tag_id) istiyorum. – avioing