【问题标题】:kaminari undefined method 'page'kaminari 未定义方法“页面”
【发布时间】:2014-02-23 05:14:20
【问题描述】:

我正在尝试将 Kaminari 添加到我的 Rails 应用程序中。我已经包含了 gem,这就是我的控制器的样子:

def index
    if params[:year]
      if params[:year].size > 0
        @songs = Song.where("year like ?", params[:year]).page(params[:page])
      elsif params[:artist].size > 0
        @songs = Song.where("artist_name like ?", params[:artist]).page(params[:page])
      elsif params[:song].size > 0
        @songs = Song.where("title like ?", params[:song]).page(params[:page])
      end
    else
      @songs = Song.first(10).page(params[:page])
    end
  end

然后添加

<%= paginate @songs %>

在我看来,我得到的错误是:

undefined method `page' for #<Array:0x007fab0455b4a8>

不知道为什么会出现这种情况,因为我按照文档一步一步操作。

【问题讨论】:

    标签: ruby-on-rails ruby kaminari


    【解决方案1】:

    Kaminari 使用paginate_array 对数组进行分页。 2个解决方案:

    首先,您可以使用limit(10) 代替first(10)

    @songs = Song.limit(10).page(params[:page])

    其次,使用paginate_array

    @songs = Kaminari.paginate_array(Song.first(10)).page(params[:page])

    【讨论】:

    • 结构的方式让我很担心:paginate_array 是否对已解决的查询进行操作?
    【解决方案2】:

    我建议你稍微重写你的控制器。更好的是,将您的过滤器移动到模型或过滤器类。查看present? 以测试params 的存在,因为这将检查nilempty

    def index
      @songs = Song
    
      @songs = @songs.where("year like ?", params[:year])          if params[:year]
      @songs = @songs.where("artist_name like ?", params[:artist]) if params[:artist]
      @songs = @songs.where("title like ?", params[:song])         if params[:song]
    
      @songs = @songs.limit(10).page(params[:page])
    end
    

    【讨论】:

      【解决方案3】:

      Tl;DR 如果您使用 Mongoid,请使用 kaminari-mongoid 而不是单独使用 kaminari。

      在 Github 上说,Kaminari 支持 Mongoid...所以我去安装了 gem 'kaminari' 结果:未知方法:page...后来我找到了 mongoid 适配器:kaminari-mongoid,现在可以使用了。

      【讨论】:

        猜你喜欢
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 2012-06-27
        • 2016-07-04
        • 2011-10-18
        • 2012-10-24
        相关资源
        最近更新 更多