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 语句。
我正在尝试实施 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 语句。