0

我是 Rails 开发的新手。我为一个方法创建了一些别名,我想知道调用了哪个别名。

我有这个代码。

alias_method :net_stock_quantity_equals :net_stock_quantity
alias_method :net_stock_quantity_gte :net_stock_quantity
alias_method :net_stock_quantity_lte :net_stock_quantity
alias_method :net_stock_quantity_gt :net_stock_quantity
alias_method :net_stock_quantity_lt :net_stock_quantity

def net_stock_quantity
  #some code here
end

我想知道用户调用了哪个别名。就像用户打电话一样,net_stock_quantity_equals我应该知道用户没有net_stock_quantity_equals打电话net_stock_quantity

任何帮助,将不胜感激。

4

3 回答 3

2

您可以覆盖 method_missing 来做到这一点。

def method_missing(method_name, *args, &block)
  if method_name.to_s =~ /^net_stock_quantity_/ 
    net_stock_quantity method_name
  else
    super
  end
end

def net_stock_quantity(alias_used = :net_stock_quantity)
  #some code
end

这里有一个教程做类似的事情http://net.tutsplus.com/tutorials/ruby/ruby-for-newbies-missing-methods/

于 2012-09-07T01:27:10.793 回答
1

它认为您正在错误地解决问题-而不是使用别名方法,而是通过发送:equals, :gte, :lte等作为方法的参数,即:

def net_stock_quantity(type = :all)
  # do something with the type here
end 
于 2012-09-05T15:45:38.650 回答
0
def net_stock_quantity(alias_used = :net_stock_quantity)
    method_called = caller[0]
    #some code
end

method_called包含被调用别名的名称。

于 2012-09-07T09:36:56.293 回答