在应用程序控制器中定义一个变量,但不要在页面上使用它,其中 content_for 标签不会出现

Define a variable in application controller, but do not use it on pages, where content_for tag won't be present

在我的应用程序中,我会有一个广告横幅,但它不会显示在每个页面上。所以,我在应用程序控制器中定义了广告横幅:

before_action :set_ad_banner

def set_ad_banner
  @ad_banner = Advertising
                   .where('date_start_on <= ? AND date_end_on >= ?', Date.today, Date.today)
                   .order('RAND()')
                   .take
  impressionist(@ad_banner)
end

我用impressionist gem看,广告展示了多少次。但是,按照现在的设置,这样做会在每次加载任何页面时计算展示次数,即使横幅没有 content_for 标记也是如此。我还尝试将代码移动到视图中,但是此代码:impressionist(@ad_banner) 在视图中不起作用。任何想法如何解决这个问题?谢谢。

例如,您可以使用

skip_before_action :set_ad_banner, only: [:action1, :action2]

避免为继承自 ApplicationController 的控制器中的某些操作调用此方法,其中定义了 before_actionGuide here.

例如:

class PostsController < ApplicationController
  skip_before_action :set_ad_banner, only: [:index]

  def index
    # some code here 
  end

  def show
    # some code here
  end
end

在上面的例子中 set_ad_banner 不会在 index 操作之前调用,但会在 show.

之前调用

如果您根本不想在某些控制器中调用它,请使用 skip_before_action :set_ad_banner 而不使用 only/except