了解 Rails Ruby 中的“@books = Book.all.page params[:page]”

Understanding "@books = Book.all.page params[:page]" in Ruby on Rails

looooong 时间 reader 和知识获取者,第一次海报。我已经开始学习 Rails,我确实需要帮助。

我正在学习使用此代码的教程:

class BooksController < ApplicationController
  def index
    if params[:query].present?
      @books = Book.search(params[:query], page: params[:page])
    else
      @books = Book.all.page params[:page]
    end
  end

我正在尝试将其应用到我自己的项目中(我有 'destinations' 而不是 'books')。我不明白的是 .page 参数是什么,它是从哪里生成的?

我在控制器上收到一个 "undefined method " 页面,但我不明白它是什么。

这是我的代码:

class DestinationsController < ApplicationController
def index
    if params[:query].present?
      @destination = Destination.search(params[:query], page: params[:page])
    else
      @destination = Destination.all.page params[:page]
    end
  end

我在目的地 table 中唯一的字段是国家/地区。我想也许这可以取代它,但唉,不行。是的,我对此很陌生。任何帮助表示赞赏。

您的编程知识有多深,尤其是Ruby?

教程显然使用了分页 gem,我将采用 kaminari,因为这是我使用的。

gem monkey patches relation to include the method page and per, 正如你在 Kaminari 主页上清楚看到的那样,该方法简单地接受 page(page_number) 和将注意使用 SQL LIMITOFFSET 拆分您的记录。 params[:page] 将是一个简单的 HTTP GET 参数 ?page=12.

我注意到您也在使用 Destination.search,这不是标准的,是您创建的吗?如果是,它可能应该类似于 Destination.search(params[:query]).page(params[:page])。但是,如果它使用 meta_search (which you shouldn't) or ransack 之类的东西,它们就非常先进,你应该检查与 Kaminari 的兼容性,我很确定它存在于 Ransack