首页 > 解决方案 > 只为特定的代码路径调用 after_action

问题描述

我有一个类似于下面代码的 Rails 控制器。在 external_click 方法之后触发 after_action。但是我最近添加了另一个代码路径,以防引用者无效,现在我看到我不希望为该路径触发 after_action。有没有办法防止在 else 子句中触发 after_action。

class ClicksController < ApplicationController
  after_action :track_click, only: :external_click

  def external_click
    if params[:url].present?
      if valid_referer?(request.referer)
        redirect_to processed_url
      else
        redirect_to product_show_path(Product.find(params[:product_id]))
      end
    else
      not_found
    end
  end

标签: ruby-on-railsmodel-view-controller

解决方案


您可以通过条件为回调传递一个过程。

after_action :track_click, only: :external_click, if: -> { params[:url].present? }


推荐阅读