Ben querysets, yani Item.all.filter(foo="bar").filter(something="else")
, yani birden çok filtre yöntemleri çalıştırabilirsiniz Django için kullanılır. Bununla birlikte, Rails'de yapılması bu kadar kolay değildir. Item.find(:all, :conditions => ["foo = :foo", { :foo = bar }])
döner bu çalışmaz yani bir dizi: Raylarda ActiveRecord sorgularını filtreleme
Item.find(:all, :conditions => ["foo = :foo", { :foo = 'bar' }]).find(:all, :conditions => ["something = :something", { :something = 'else' }])
def combine(array1,array2)
conditions = []
conditions[0] = (array1[0]+" AND "+array2[0]).to_s
conditions[1] = {}
conditions[1].merge!(array1[1])
conditions[1].merge!(array2[1])
return conditions
end
Kullanımı:
dizi1 = [ "foo =: foo", {: foo = 'bar'}] dizi2 = [ "şey
Bu yüzden bu fonksiyonu ile geldi =: bir şey", {: bir şey = 'else'}] koşullar = birleştirmek (dizi1 dizi2) ürün = Item.find (: tümü,: koşullar => koşullar)
Bu oldukça iyi çalıştı. Ancak yazma diziler isteğe bağlı sayıda birleştirmek veya temelde steno edebilmek istiyorum:
conditions = combine(combine(array1,array2),array3)
kimse bu konuda yardımcı olabilir misiniz? Şimdiden teşekkürler.
Evet, tam olarak istediğim bu. Screencast'ı izledim ve bana tamamen mantıklı geldi. Ama kodu ilk başlattığımda, adlandırılmış kapsamın tanımlanmamış bir yöntem olduğunu söyleyen bir hata aldım. Sonra ben Rails 1.8 ile çalıştığımı fark ettim, bu yüzden 2.3.something rails güncellendi ve hala aynı hatayı aldım .... ugh, isimleri kapsamları gerçek olamayacak kadar iyi olduğunu biliyordum:/ – user94154
Eğer Rails donduysa, o zaman kodunuz hala bir önceki Rails sürümünü kullanıyor. 1,8 Raylar asla var olmadı, bu yüzden Ruby 1.8 demek gerekir. raylar -v, komut satırında Rails'in hangi sürümünün bulunduğunu size söyleyen bir komuttur. script/about, uygulamanızın ortamı hakkında daha fazla bilgi verecektir. –
kuyu ruby script/hakkında tanınmadı. Dondurulmuş Raylar açısından ne anlama geliyor? – user94154