2012-07-04 6 views
5

Bağlantılı ama yine de çok basit. Aktif Kayıttaki Bağlantılı Listeler. Ben şimdi Bildiğim kadarıyla, biz modelinde iki dernek gerekir:Raylar ActiveRecord Modeli Şimdi sık ortaya çıkmasa gibi görünen bir sorunu belirtecektir yoğun googling sonra Listesini

class Child < ActiveRecord::Base 
    belongs_to :parent 
    belongs_to :next, :class_name => 'Child', :foreign_key => 'next_id' 
    belongs_to :previous, :class_name => 'Child', :foreign_key => 'previous_id' 
end 

Şimdi biz bir ebeveynin tüm çocukları alabilirsiniz: soruya şimdi

children = Child.where("parent_id = ?", parent_id) 

Ve: Tabii istiyorum veritabanından tüm sorguları tek bir sorgu ile almak için, ama aynı zamanda çocuklara bağlı düzen içinde gitmek istiyorum, yani birincisi nil'in bir önceki özniteliği olan çocuk olacak, bir sonraki çocuk bağlı olan kişi olacak Bir sonraki öznitelik, ve bir sonraki özniteliğin nil olduğu kadar devam eder. Bunu yapmak mümkün mü, yoksa ilk çocuğu sorgulamalı mıyım, ve sonra çocuktan çocuğa "önbellekleme" yapmadan mı gitmem gerekiyor?

+0

childs? çocuklar – Maysam

cevap

2

resort ve ranked-model taşlar diğer alternatiflerdir. İlki, bağlantılı listelere benzer bir yaklaşım kullanır. İkincisi bir pozisyon özniteliği kullanır.

+0

Sonunda sıralama-model kullanarak sona erdi –

1

Muhtemelen Raylar acts_as_list mücevher kullanmalıdır. Listedeki öğenin konumunu kaydeder ve hatta listeler ve belongs_to için üst nesneler kapsamaktadır. Tüm öğeleri sorgulamanıza ve bunları doğru bir şekilde sıralamanıza izin vererek bu sorunu da çözebilir.

+1

Düşüncelerimi de aklımdan geçti, ama acts_as_list size bağlantılı listenin önemli yararını vermez - ucuz yerleştirme ve keyfi konumlardan kaldırma. – Chowlett

+0

(şimdiye kadar, ben bu uygulama kendim yapmış çünkü) ama tam olarak bu ı bir nesne silme eğer, ben sadece önceki niteliklerini değiştirmek istiyorum .... uzak olsun istiyorum ne taş acts_as_list bilmek güzel ve bir sonraki modeli ve değil 's komşularının özelliklerini günceller böylece onu 'destroy' yöntemini geçersiz ve yapabilir –

+1

özellik konumunu değiştirerek yüzlerce sıra geçmesi. biri içlerinden bağlantılı liste yol yineleme sonra bir ebeveynden tüm çocuk herkesin getirir ve eğer – Draiken