cevap

2

En son öğeyi hariç tutan bir SQL sorgusu oluşturmaya çalışmak buna değmez. şu şekilde görünecektir yorumlardan

@posts = Post.all[0..-2] 

Öteki örnek: Özellikle alt sorgu sadece Array içine tüm kayıtları yüklemek yerine geçen hariç daha yavaş olabilir

@contact_prices = @contact.retail_prices.all.order("created_at DESC").load[0..-2] 

Diğer bir seçenek

(bağlı senin ilişki sırası) offset kullanmak olabilir:

@contact_prices = @contact.retail_prices.order("created_at DESC").offset(1) 
+0

bu yüzden bu nesneye sahibim, @contact_prices = @ contact.retail_prices.all.order ("created_at DESC") ve bu çalışmadı – suyesh

+0

Bu bir AR nesnesini döndürmeyecek bir AR nesnesi değil –

+0

OP'nin bunu tanımlamadığını iddia ediyorum Bir "İlişkime" ve bir "Array" a ihtiyaç duymaz. – spickermann

1

Bu yaptığımı düşünüyorum en doğrudan yolu nedir

Post.where.not(id: Post.last&.id) 
+0

Gerçekten yarış koşulları değil, yalnızca senkronize olmayan bir sayı elde ediliyor. Bu durumda çok önemli görünmüyor, ama kesin olarak +1 için. İşlemin nasıl gerçekleştirileceğine dair ayrıntılar, ne kadar kilitli olmasını istediğinize bağlı olarak değişir (örneğin, herhangi bir Mesajın ortada oluşturulmadığından veya silinmediğinden emin olmak için kilitleyebilirsiniz, ancak bunun çok ağır olduğunu düşünüyorum). Veri senkronizasyonu sağlamadan en kötü durum, sahip olmamanız gereken bir gönderi almanızdır, yoksa sahip olmanız gereken bir şey elde edemezsiniz, fakat bu, çizgiyi bir an önce yürütmüş olmanızla aynı şeydir. –

0

Bir satır AR gibi bir şey deneyebilirsiniz, sen sayfalama veya diğer SINIR sorguları izin vermek için sorgu istiyorsanız

Post.limit(Post.count - 1) 

: Eğer yapmaya çalışıyoruz Hile yapacak çok sayıda cevap var, ancak ek bir seçenek atıyor:

1

: Eğer

Post.where("id < ?", Post.last.id) 
İlgili konular