Ransack 导致模型上的其他查询出现问题

Ransack causing issues with other queries on the model

我正在尝试实施 Ransack gem。我想我有 gem 工作,但我的问题是同一模型上的其他查询。例如,我在我的索引页面上有一个简单的 <%= @roasts.count %> 烤肉总数。但是当我提交搜索查询 (http://localhost:3000/roasts?utf8=%E2%9C%93&q%5Bname_cont%5D=firefox&commit=Search) 时出现错误 undefined method 'count' for nil:NilClass。我 90% 确定这是由于我如何在 if-else 语句下设置查询,但我无法计算出正确的设置。

controller/roast_controller.rb

class RoastsController < ApplicationController
  before_action :set_roast, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, only: [:create, :edit, :update, :destroy]
  before_action :set_search

  def index
    if params[:q]
      @q = Roast.ransack(params[:q])
      @roastsalpha = @q.result.order(:name)
    else
      @roasts = Roast.all
    end
      @roastsalpha = Roast.order(:name)
      @roastsdesc = Roast.all.order("created_at DESC")
      @mostpopularroast = Roast.group(:country).select(:country).order("count(*) desc").first
      @mostpopularblend = Roast.group(:bestfor).select(:bestfor).order("count(*) DESC").first
      @countroastschart = Roast.order("roaster DESC").all
  end

看看您的 Index 操作:

def index
    if params[:q]
      @q = Roast.ransack(params[:q])
      @roastsalpha = @q.result.order(:name)
    else
      @roasts = Roast.all
    end

您收到错误消息是因为@roasts 为零。如果我的假设是正确的,即您的 set_search 操作正在执行类似 @search = Roast.ransack(params[:q]) 的操作,那么在每个操作和设置 params[:q] 之前都会调用它。因此,如果我们查看您的 if 语句; params[:q] 永远为真,@roasts 永远不会被设置。我认为要解决此问题,您应该删除 if-else 语句。