产品控制器的未定义局部变量或方法“params”

undefined local variable or method `params' for products controller

我正尝试在我的 rails 应用程序上使用 kaminari 进行分页。在第一页我想展示 11 种产品,在所有其他页面我想展示 12 种产品。我按照 this post 上的说明进行操作,但出现以下错误:

undefined local variable or method `params' for #<Product::ActiveRecord_AssociationRelation:0x007fcef461e908>

使用的显示方法见下文:

@page = (params[:page]).to_i

if @page == 1
  @products = Store.find(params[:id]).products.order(sort_column + ' ' + sort_direction).limit(11)
else
  @products = Store.find(params[:id]).products.order(sort_column + ' ' + sort_direction).limit(12).offset(@page*12-13)
end

@products.instance_eval <<-EVAL
  def current_page
    #{@page}
  end
  def total_pages
    ((Store.find(params[:id]).products.all.count+1)/12.0).ceil
  end
EVAL

错误是在store#show下面这行代码中产生的:

  <%= paginate @products %>

我能够通过在 instance_eval 之外创建一个 class 变量然后调用它来破解它的错误。请参阅下面的代码。

 @page = (params[:page] || '1').to_i

@@total_pages = ((Store.find(params[:id]).products.all.count+1)/12.0).ceil

if @page == 1
  @products = Store.find(params[:id]).products.order(sort_column + ' ' + sort_direction).limit(11)
else
  @products = Store.find(params[:id]).products.order(sort_column + ' ' + sort_direction).limit(12).offset(@page*12-13)
end

@products.instance_eval <<-EVAL
  def current_page
    #{@page}
  end
  def total_pages
    @@total_pages
  end
EVAL

可能不是正确的方法,但它适合我的目的。