2011-08-10 11 views
10

मुझे नीचे दी गई उदाहरण में मेरी तालिका में अंतिम रिकॉर्ड मिल सकता है, लेकिन अगर मैं अंतिम से पहले रिकॉर्ड ढूंढना चाहता हूं, उदाहरण के लिए। (अंतिम -1) या (अंतिम -2) ..? मैं अपने प्रत्येक पाश में इस उदाहरण है:रेल: आखिरी बार रिकॉर्ड कैसे प्राप्त करें?

Table.find(:last, :conditions => {:dogovor_id => p.id}).id 

उत्तर

19
Table.where(:dogovor_id => p.id).order("id DESC").first   # last 
Table.where(:dogovor_id => p.id).order("id DESC").offset(1).first # last - 1 
Table.where(:dogovor_id => p.id).order("id DESC").offset(2).first # last - 2 
+0

धन्यवाद! यह काम करता हैं! :) –

13

एक और आसान तरीका है याद करने के लिए: Model.last(2).first

+0

मैं स्वीकृत एक के बजाय यह –

2

आप नकारात्मक सूचकांक का उपयोग कर सकते हैं।

दूसरे करने के लिए पिछले तत्व सूचकांक -2 है:

Model.all[-2] 

10 वीं पिछले:

Model.all[-10] 

रेल में 5[-2] और [-3] के लिए अंत से पहले रूपों have aliases। तो अगर आप चाहते हैं, यह का उपयोग करें:

Model.second_to_last 
Model.third_to_last 
0

यहां तक ​​कि अगर स्वीकार किए जाते हैं जवाब काम करता है:

Table.where(:dogovor_id => p.id).order("id DESC").first   # last 
Table.where(:dogovor_id => p.id).order("id DESC").offset(1).first # last - 1 
Table.where(:dogovor_id => p.id).order("id DESC").offset(2).first # last - 2 

'पहली' विधि एक सरणी विधि है, तो अपनी 'सीमा' विधि का उपयोग करने के लिए बेहतर के विषय में प्रदर्शन है जो है एक ActiveRecord विधि और SQL क्वेरी के लिए LIMIT क्लॉज संलग्न करता है:

Table.where(dogovor_id: p.id).order(id: :desc).offset(1).limit(1) # last - 1 
संबंधित मुद्दे