0

これは機能しますが、不格好に感じます。パラメータに基づいてコレクションを制限するためのより多くのレール-yの方法はありますか?アクティブなモデルシリアライザーgemを使用しており、paramsを介して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

終わり

ありがとう!

4

1 に答える 1

4

何もする必要はありません。params [:limit]を直接渡すだけです。

def index
  @page = Page.limit(params[:limit])
end

params [:limit]が定義されていない場合(nil)、すべてのレコードが返されます。整数に変換する必要はありません。Railsがあなたに代わってやってくれます!

アップデート

非数値が渡されていないことを本当に確認したい場合は、Pageクラスに独自のlimitクラスメソッドを作成できます(テストされていませんが、機能するはずです)。

class Page << ActiveRecord::Base

  def self.limit(num = nil)
    num = num.to_i > 0 ? num : nil
    super(num)
  end

end
于 2012-05-25T02:59:58.133 に答える