提供导轨过滤器内的条件

时间:2018-07-10 10:55:54

标签: ruby-on-rails

我在控制器中有如下方法:

class PagesController < ApplicationController
 caches_action :listing

  def listing
   #..........#
  end

end

我可以通过继承应用控制器来从另一个控制器访问@page变量:

class ApplicationController
  before_action :get_page

  def get_page
    @page = #page
  end
end

我很难弄清楚该怎么办

caches_actionif @page?页面控制器

的过滤器中

2 个答案:

答案 0 :(得分:2)

您可以这样写

caches_action :listing, if: -> { @page.present? }

caches_action :listing, unless: -> { @page.blank? }

答案 1 :(得分:0)

根据documentation

,您可以使用基于条件的方法
          caches_action :index, :if => proc do
            !request.format.json?  # cache if is not a JSON request
          end

          caches_action :show, :cache_path => { :project => 1 },
            :expires_in => 1.hour

          caches_action :feed, :cache_path => proc do
            if params[:user_id]
              user_list_url(params[:user_id, params[:id])
            else
              list_url(params[:id])
            end
          end

或已经建议的一种简单方法

  

caches_action:listing,如果:-> {@ page.present? }

根据要求使用它。