【问题标题】:Rails before_filter different argumentsRails before_filter 不同的参数
【发布时间】:2015-09-21 07:41:24
【问题描述】:

我有控制器动作,它们都使用一种方法,但参数不同。 我可以以某种方式重构它以使用before_filter吗?

  def usd_cash
    transaction_currency("USD cash")
  end

  def usd_bank
    transaction_currency("USD bank")
  end

  def rub_bank
    transaction_currency("RUB bank")
  end

  private

  def transaction_currency(currency)
    @transactions = Transaction.where(location: "#{currency}")
  end

【问题讨论】:

  • 看起来不错。请注意,您可以只使用location: currency
  • 是的,是的。我只是想知道这是否可能。
  • 是的,你可以使用params[:action],但感觉很hacky

标签: ruby-on-rails ruby before-filter


【解决方案1】:

您可以使用一些元编程,但这不会像您目前拥有的那样可读:

%i(
  usd_cash
  usd_bank
  rub_bank
).each do |method|
  define_method method do
    transaction_currency(method.to_s.split('_').instance_eval {first.upcase + ' ' + last})
  end
end

【讨论】:

  • 谢谢。我想就是这样。确实看起来不太可读,所以我不会使用它,但现在我知道这在理论上是可能的
【解决方案2】:

你可以试试这个方法。你可以像before_filter { usd_type("RUB bank")}一样拨打usd_type

我在这里假设你在过滤之前这样做,你可以根据自己的要求进行更改。

def usd_type(type)
  transaction_currency(type)
end

private

def transaction_currency(currency)
  @transactions = Transaction.where(location: "#{currency}")
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2011-10-31
    • 2011-01-24
    相关资源
    最近更新 更多