我正在尝试创建特定查询。
我有一些杂志和一些杂志,在我的观点中,我创造了过去20种杂志的封面流。当我显示一条记录时,我想从该特定记录开始封面流程,保持默认顺序。
我的模特是这样的:
class Magazine < ActiveRecord::Base
default_scope lambda { order 'number DESC' }
scope :published, -> { where(visible: true).where 'published_at <= ?', Time.zone.now }
end
和我的控制器&#34;显示&#34;行动是
def show
#add scope to magazine.all
@magazine = Magazine.published.find(params[:id])
@magazines = Magazine.published.limit(20)
if @magazine.can_show?
render :show
else
not_found
end
end
@magazine按编号DESC排序,但我需要引入一个偏移量,起始ID为@ magazine.id。
详细示例
NOW @magazine就是这样:
@magazines = [20,19,18,17,16,14,13,12,11,9,8,7,6,5,4,3,2,1]
@magazine.id = 7
我想用@ magazine.id作为起点。结果必须是:
@magazines = [7,6,5,4,3,2,1]
使用@magazine = 14,结果必须是
@magazines = [14,13,12,11,9,8,7,6,5,4,3,2,1]
是否有任何命令可以创建这样的范围?
答案 0 :(得分:0)
您可以通过单行实现:
@magazines.drop(@magazines.index(@magazine.id)) if @magazines.include?(@magazine.id)
示例:
> @magazines
=> [20, 19, 18, 17, 16, 14, 13, 12, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1]
> @magazines.drop(@magazines.index(14))
=> [14, 13, 12, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1]
> @magazines.drop(@magazines.index(7))
=> [7, 6, 5, 4, 3, 2, 1]
答案 1 :(得分:0)
一个班轮,其他方法
@magazines = @magazines.slice(@magazines.index(@magazine.id), @magazines.size) if @magazines.include?(@magazine.id)