如何检查rails控制器中是否存在params?

时间:2012-05-25 02:52:02

标签: ruby-on-rails ruby paginate

这很有效,但感觉很笨拙。是否有更多的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

谢谢!

1 个答案:

答案 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