Rails: Запросить все записи, кроме первой? - PullRequest
3 голосов
/ 09 марта 2012

Как бы я запросил все , кроме первой записи, используя ActiveRecord?

Что-то вроде ...

Item.where(:widget_id => 123).all_but_first

Я использую Rails 3.2.

Ответы [ 5 ]

13 голосов
/ 09 марта 2012

Я бы сделал это так:

Item.where(:widget_id => 123).all[1..-1]
4 голосов
/ 09 марта 2012

В качестве альтернативы вы можете использовать смещение и ограничение с очень высоким пределом.

Item.where(:widget_id => 123).limit(18446744073709551610).offset(1)

см. Mysql Offset Infinite row для обсуждения этого вопроса.

1 голос
/ 12 мая 2018

Немного опоздал на вечеринку, но на случай, если это кому-нибудь пригодится:

  • Если вы хотите вернуть массив, я думаю offset - ваш лучший вариант и наиболее читаемый.

  • Если вы хотите вернуть отношение, вы можете сделать: widget.items.where.not(id: widget.items.first.id).

Это предполагает, что вы не заботитесь о заказе. Если вы это сделаете, вы должны добавить это, конечно.

0 голосов
/ 31 мая 2018

Помимо ответа Вератикуса, вы также можете указать способ заказа товаров:

Item.where(:widget_id => 123).all[1..-1].order('created_at DESC')

Счастливое кодирование:)

0 голосов
/ 01 мая 2017

С областями видимости теперь можно ответить точно

class Item < ApplicationRecord
    scope all_but_first -> { all[1..-1] }
end

Но я бы посоветовал вам убедиться, что вы понимаете, что вы подразумеваете под словом «все, кроме первого».Вы имеете в виду первый созданный, самый последний, самый низкий идентификатор?Когда вы это знаете, вы можете добавить порядок в область, например,

scope :all_but_first, -> { order(created_at: :desc)[1..-1] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...