2012-03-08 2 views

ответ

12

Я хотел бы сделать это следующим образом:

Item.where(:widget_id => 123).all[1..-1] 
+0

без создания '' 'all_but_first''' метод (который, вероятно, просто этот точный код) Я думаю, что это самый простой и очевидный способ справиться с этим. –

+0

Обратите внимание, что это вернет вам 'Array', а не' ActiveRecord_Relation' – davideghz

4

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

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

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

1

С прицелами это сейчас можно ответить точно

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

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

scope :all_but_first, -> { order(created_at: :desc)[1..-1] } 
Смежные вопросы