2016-07-13 2 views
1

ユーザーメッセージをdbに格納します。私は最後の10レコードを照会し、それらを逆順に返す必要があるので、ユーザーがmessage_1、message_2、およびmessage_3を作成すると仮定します。結果は次のようになります:[message_1, message_2, message_3]、すなわち最後のメッセージは最後の結果です。しかし、この範囲:最後のレコードをスコープNの逆順で照会します。

scope :last_page, ->() { order('created_at DESC').limit(10) 

は、最後のメッセージが上にある、つまり[message_3, message_2, message_1]のようなレコードを返します。私が試した何

は次のとおりです。

むしろ ActiveRecord::Relationよりも、望ましい結果を生成するが、配列を返す
scope :last_page, ->() { order('created_at DESC').limit(10).sort_by(&:created_at) } 

。私は配列よりむしろ関係を返すスコープが大好きです。それをどうすれば実現できますか?

+1

あなたは範囲内の 'sort_by'を使用することはできません。スコープはチェーンであり、SQLを構築します。 'sort_by'はRubyの列挙可能なメソッドで、データをメモリ内で処理します。あなたはちょうど他のトリック –

+0

を正確に適用する必要があります。私はあなたが選別している理由を尋ねるだろうか? 'order( '...')'はそれを気にかけないのですか? – jaydel

答えて

1

order('created_at DESC')はあなたを与えるだろうを降順最初として、あるいは単純に、最新の(または最後)。 order('created_at ASC')lastを組み合わせる必要があります。以下のコードは動作するはずです。

scope :last_page, ->() { order('created_at ASC').last(10) 

または

scope :last_page, ->() { order('created_at').last(10) 
+0

は、結果の配列またはActiveRecord :: Relationを返しますか?私はあなたが範囲からの関係を全く得ることができるかどうか疑問に思っています。わからない。 – jaydel

+1

@jaydelすべてのスコープメソッドは 'ActiveRecord :: Relation'オブジェクトを返します。 – Pavan

+0

クール、ありがとう。私の次の質問は 'ActiveRecord :: Relation'や' Array'/'Enumerable'のlast()メソッドですか? – jaydel

関連する問題