我可以在Ruby上添加对象返回结果的限制吗?

时间:2010-07-14 15:11:42

标签: ruby-on-rails ruby

例如,我想知道用户有很多帖子。所以,我可以使用这个回复帖子:

@user.posts

但我不想让所有帖子都回来。我想限制结果,例如,前十名创建,或者可能按某些列排序。我怎么能这样做?谢谢。

3 个答案:

答案 0 :(得分:1)

试试这个:

@user.posts(:limit => 10, :order => "created_at DESC")

http://guides.rubyonrails.org/active_record_querying.html

答案 1 :(得分:1)

您始终可以创建一个通用范围来处理限制,例如将其放在初始化程序中:

class ActiveRecord::Base
  named_scope :limit, lambda { |*limit| {
    :limit => limit[0] || 10,
    :offset => limit[1]
  }}
end

这使限制查询变得容易:

# Default is limited to 10
@user.posts.limit

# Pass in a specific limit
@user.posts.limit(25)

# Pass in a specific limit and offset
@user.posts.limit(25, 25)

对于更强大的内容,您可能需要调查will_paginate

答案 2 :(得分:0)

您应该查看has_many关联的options

您可以尝试这样的事情:

class User < ActiveRecord::Base
  has_many :posts
  has_many :top_ten_posts, { :class_name => "Post", :order => :some_rating_column, :limit => 10 }
end