-1

ニーズが多様で具体的すぎるため、独自のページネーション コードを使用する必要があります。このスニペットをコピーして、多くのコントローラー アクションに貼り付けました。

per_page = params[:per_page] ? params[:per_page].to_i : 15
page_num = params[:page] ? params[:page].to_i : 1
to_skip = ( page_num - 1 ) * (per_page)
max_index = per_page * page_num

これをすればするほど、私は愚かに感じます。これをより適切に行う方法があると確信していますが、その方法はわかりません。

ボーナス(これに対して賞金を授与できますか?)->必要に応じて、モデルでCOMPUTEDパラメーターを使用できるようにしたいと思います

例:

# frontend requests for items 15-30

def controller_action
  # code as above
  # Item.get (...)
end

# and in the model have access to these params
def get
  # use per_page, to_skip 
end
4

1 に答える 1

1

私はおそらくこれをApplicationControllerリクエストフィルターとして入れます

class ApplicationController < ActionController::Base
  protected
  def set_paging_params
    @per_page = params[:per_page] ? params[:per_page].to_i : 15
    @page_num = params[:page] ? params[:page].to_i : 1
    @to_skip = ( @page_num - 1 ) * (@per_page)
    @max_index = @per_page * @page_num
  end
end

class FooController < ApplicationController
  before_filter :set_paging_params, only: [:index]

  def index
    # do stuff with @per_page and others
  end
end

明示的に渡さない限り、モデルがこれらのコントローラーインスタンス変数を使用する方法はありません(またはクロージャーでキャプチャしますが、実装がこれをサポートするかどうかはわかりませんItem.get)。このようなもの:

class FooController < ApplicationController
  before_filter :set_paging_params, only: [:controller_action]

  def controller_action
    Item.get(params[:id], per_page: @per_page,
      page_num: @page_num,
      to_skip: @to_skip,
      max_index: @max_index,
    )
  end
end

class Item
  def self.get iid, opts = {}
    # use opts[:per_page] here
  end
end
于 2013-01-18T06:13:40.853 に答える