在应用程序控制器中定义一个变量,但不要在页面上使用它,其中 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_action
。 Guide 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
。
在我的应用程序中,我会有一个广告横幅,但它不会显示在每个页面上。所以,我在应用程序控制器中定义了广告横幅:
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_action
。 Guide 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
。