Rails 5 Controller中的多个IF语句

时间:2017-04-29 13:15:50

标签: controller ruby-on-rails-5 kaminari

我试图在索引中使用两个if语句。第一个允许用户按标签查看,第二个定义Kaminari分页宝石gem 'kaminari'

问题是,我无法兼顾两者。使用下面的代码,分页工作,但按标签过滤不起作用。如果我注释掉分页,则标签可以正常工作。

我很确定我没有关于两个if语句的正确逻辑,但我无法弄清楚如何正确理解这一点。

class CoffeeshopsController < ApplicationController


  def index
    if params[:tag]
      @coffeeshops = Coffeeshop.tagged_with(params[:tag])
    else
      @coffeeshops = Coffeeshop.all.order("created_at DESC").page params[:page]
    end

    if params[:term]
      @coffeeshops = Coffeeshop.search_by_full_name(params[:term])
    else
      @coffeeshops = Coffeeshop.all.order("created_at DESC").page params[:page]
    end
  end

2 个答案:

答案 0 :(得分:1)

您在第二个if块中覆盖了@coffeshops。话虽如此,你应该在所有过滤之后加入分页。

  def index
    @coffeeshops = Coffeeshop.all
    if params[:tag]
      @coffeeshops = @coffeeshops.tagged_with(params[:tag])
    end
    if params[:term]
      @coffeeshops = @coffeeshops.search_by_full_name(params[:term])
    end
    # paginate
  end

答案 1 :(得分:0)

用下面解决它。感谢另一个SO问题。

def index
  if params[:tag]
    @coffeeshops = Coffeeshop.tagged_with(params[:tag])
  else
    @coffeeshops = Coffeeshop.all
  end
  @coffeeshops = @coffeeshops.order("created_at DESC").page params[:page]
end

重点我现在也已经删除了搜索术语。