2010-09-05 18 views
9

Uygulamamızı Rails3'e yükseltmeyi planlıyoruz. Oldukça biraz kullandığımız bir eklenti nested_has_many_through. Bu eklenti güncelliğini yitirmiş ve artık korunmuyor ve yeni bir Rails3 uygulamasında çalışmakta görünmüyor.Rails3 has_many ile iç içe geçmiş

Basit bir örnek:

Author.rb 
has_many :posts 
has_many :categories, :through => :posts, :uniq => true 
has_many :related_posts, :through => :categories 

Post.rb 
belongs_to :author 
belongs_to :category 

Category.rb 
has_many :posts 

herkes bu ya bir çalışma raylar 3. eklentisi işlemek için en iyi uygulama yolunu tavsiye edebilir misiniz?

Teşekkürler!

+1

Haha Çatalınızı yeni buldum http://github.com/releod/nested_has_many_thr Bu soruyu hatırla ve hatırla, ve sana çatal hakkında her şeyi anlatmak için buraya geliyordu. Sonra kullanıcı adını gördüm. İyi iş, sadece bunu Rails 3 app üzerinde test ve (çoğunlukla) çalışıyor. Bütün gece, Rails'i doğrudan https://rails.lighthouseapp.com/projects/8994/tickets/1152-support-for-nested-has_many-through-associations adresinde olduğu gibi takmaya çalışıyordum. Çatalla şablon olarak başlayacağım ve şimdi daha da ileri gidebilirim! –

+0

+1 http://github.com/releod/nested_has_many_through raylarınızda3 çatal da benim için çalışıyor, raylar kadar kullanacak 3.1 – clyfe

cevap

0

has_many: related_posts bölümü tarafından daha fazla kafam karıştı. Kategorize edilmiş gönderileri bir araya getirmeye çalışıyor musunuz? 'X' kategorisindeki tüm yazılar 'ilgili' olarak kabul edilir mi? dernek üzerinde class_name:

has_many :related_posts, :class_name => 'Post', :through => :categories 

Ama ikinci olarak, bu durum büyük ihtimalle Eğer öyleyse, bu orada bir RelatedPost sınıfı olmak o kadar amacıyla sade Bunu düzeltmek için dayalı olarak çalışmayacak, belirtmek gerekir başlamak için doğru yaklaşım değil. Herhangi bir yazar zaten author_id yabancı anahtarı üzerinden yazdı_many yazdığı için, kategori tablosuna geri dönmeye çalışmak yerine, gruplama mantığını kullanmanın bir anlamı yoktur. Bu temizlemek

Alternatif yaklaşımlar: Eğer gerçekleştirmek için çalışıyor şeyler değildi olsaydı

Author.rb Tabii

has_many :posts do 
    def related 
    all.group_by(&:category_id) 
    end 
end 
author.posts.related 
=> OrderedHash 

, bütün bunlar tartışmaya açıktır. : P

+2

Onun örneğinin (bu yüzden kolayca kusurlu) zıt olduğunu düşünmeye meyilliyim. Onun sorusu hala temel olarak önemlidir. Ve bilgilenimin en iyisine göre, iç içe geçmiş bir çalışma çözümü, Rails 3'te pek çok geçişe sahip değil (Rails <2.3 için eski nested_has_many_through) –

+0

Sorunun ikinci kısmı, "en iyi uygulamayı önermekten" bahsetmişti. Benim amacım, uygulamanızın gerektirmesi durumunda, muhtemelen bunu başarmak için daha iyi bir mekanizma var. ;) Örneği gerçekten doğruysa, gerçek kodunu görmek son derece yardımcı olacaktır. – jenjenut233

+1

Yeterince adil. Bir iç içe geçmişin bir çok bağlantısının (yani Rails olmayanlar için birden fazla INNER JOIN'in kullanılması) geçerli bir çözüm olduğu ve çoğu zaman en iyisi olduğu durumlar kesinlikle vardır. Verilen "Yazar - - aboneler> -

0

Raylar 3 (ilk en ilişkili kategorilerle Mesajları denenmemiş, siparişler):

category.rb:

class Category < ActiveRecord::Base 
    class << self 
    def posts 
     Post.joins(:categories). 
      where(:categories => select('id').all.map(&:id)). 
      group('posts.id'). 
      order('count(*) DESC') 
    end 
    end 
end 

Kullanım: Bu ile inşa edilmiştir

related_posts = author.categories.posts 
İlgili konular