【问题标题】:Only call after_action for particular code paths只为特定的代码路径调用 after_action
【发布时间】:2018-12-21 20:00:29
【问题描述】:

我有一个类似于以下代码的 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-rails model-view-controller


    【解决方案1】:

    您可以通过条件为回调传递 proc。

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

    【讨论】:

    • 谢谢!在这种情况下,我做了after_action :track_click, only: :external_click, if: -&gt; { valid_referer } 并创建了一个单独的方法def valid_referer @valid ||= valid_referer?(request.referer) end,这样valid_referer? 方法就不会被调用超过必要。
    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 2012-05-08
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多