所以我有一些帖子,并希望在侧边栏中显示 n .. m 最近的条目(这些数字在配置中设置)
我可以轻松地获取最新的 n 记录
class Post < ActiveRecord::Base
default_scope :order => "created_at DESC"
scope :published, lambda { where("blog_entries.created_at <= ?", Time.zone.now) }
scope :latest, lambda { |n| published.limit(n) }
end
@posts = Post.latest(6)
但我想要的是
@posts = Post.published.limit(6, 12)
但是这会给wrong number of arguments
,所以在AR中有什么办法吗?现在我正在玩will_paginate
,但是使用它似乎很麻烦。
答案 0 :(得分:21)
好的,答案是,我认为:
@posts = Post.published.limit(6).offset(5)
它将从第六个开始检索6个帖子。
edit2:关于限制([6,12]),我觉得很奇怪:
attr_accessor :limit_value
def limit(value)
relation = clone
relation.limit_value = value
relation
end
def build_arel
...
arel.take(connection.sanitize_limit(@limit_value)) if @limit_value
...
end
def sanitize_limit(limit)
if limit.is_a?(Integer) || limit.is_a?(Arel::Nodes::SqlLiteral)
limit
elsif limit.to_s =~ /,/
Arel.sql limit.to_s.split(',').map{ |i| Integer(i) }.join(',')
else
Integer(limit)
end
end
所以我真的不知道它如何与数组一起工作。但我显然错过了一些东西。你知道吗?
答案 1 :(得分:0)
对于导轨5(不确定导轨4)。 offset(x).limit(y)
正常运行。 limit(y).offset(x)
的行为仍然如其他答案所述。