Определите переменную в контроллере приложения, но не используйте ее на страницах, где тег content_for отсутствует
В моем приложении будет рекламный баннер, но он будет отображаться не на каждой странице. Итак, я определил рекламный баннер в контроллере приложения:
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
драгоценный камень, чтобы видеть, сколько раз было показано объявление. Но при этом, как это установлено сейчас, будут учитываться показы при каждой загрузке любой страницы, даже если ее нет. content_for
тег с баннером. Я также пытался переместить код в представление, но этот код: impressionist(@ad_banner)
не работает в представлении. Есть идеи, как решить эту проблему? Благодарю.
1 ответ
Например, вы можете использовать
skip_before_action :set_ad_banner, only: [:action1, :action2]
чтобы избежать вызова этого метода для некоторых действий в контроллерах, которые наследуются от вашего ApplicationController
где before_action
был определен. Руководство здесь.
Например:
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
,