这很有效,但感觉很笨拙。是否有更多的rails-y方式来限制基于params的集合?我正在使用活动模型序列化器gem并且需要通过参数来限制json响应。
def index
if params.has_key?(:limit)
limit = params[:limit].to_i
@pages = Page.all.take(limit)
else
@pages = Page.all
end
end
如果我使用以下内容,则在将字符串或任何内容传递给限制参数时会收到错误消息。
def index
@pages = Page.limit(params[:limit])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @pages }
end
端
谢谢!
答案 0 :(得分:4)
你不应该做任何事情。只需直接传递params [:limit]。
def index
@page = Page.limit(params[:limit])
end
如果没有定义params [:limit](nil),它将只返回所有记录。您甚至不需要将其转换为整数。 Rails为你做到了!
<强>更新强>
如果你真的想检查是否没有传入非数字,你可以在你的Page类中创建自己的限制类方法(未测试,但应该有效):
class Page << ActiveRecord::Base
def self.limit(num = nil)
num = num.to_i > 0 ? num : nil
super(num)
end
end