在将带有参数的范围应用于模型时使用 will_paginate

Using will_paginate while applying a scope with params to the Model

我正在尝试创建一个可用于按用户名搜索用户的搜索框。我遇到的问题 运行 是我也想使用 will_paginate gem。这行代码 @users = User.name(params[:name]).paginate(page: params[:page]) if params[:name].present? 是我认为问题所在。

class UsersController < ApplicationController

def index
  @users = User.all.paginate(page: params[:page])
  @users = User.name(params[:name]).paginate(page: params[:page]) if params[:name].present? 
end 

class User < ActiveRecord::Base
  scope :name, -> (name) { where("name ILIKE ?", "%#{name}%")} 
end

users/index.html.erb

  <%= form_tag users_path, method: :get do %>
    <%= text_field_tag :name, params[:name], :placeholder => "Search by name" %>
    <%= submit_tag "Search"%>
  <% end %>

您的控制器文件的第一行中有一个 space。超级 class 里面有一个 space "Application Controller"

这会导致 Heroku 出现启动时间 H10 错误。

:name 不能用作范围。当我将其更改为 :namesearch 时,代码有效。

class User < ActiveRecord::Base
  scope :nameseach, -> (name) { where("name ILIKE ?", "%#{name}%")} 
end

def index
  @users = User.all.paginate(page: params[:page])
  @users = User.namesearch(params[:name]).paginate(page: params[:page]) if params[:name].present? 
end