查找rails模型中调用的别名方法

时间:2012-09-05 15:17:47

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 meta-search

我是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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

它认为您正在正确接近问题 - 而不是使用别名方法,通过:equals, :gte, :lte等作为参数发送到方法,即:

def net_stock_quantity(type = :all)
  # do something with the type here
end 

答案 1 :(得分:1)

您可以覆盖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/

答案 2 :(得分:0)

def net_stock_quantity(alias_used = :net_stock_quantity)
    method_called = caller[0]
    #some code
end

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