0

我是rails開發新手。我爲一個方法創建了一些別名,我想知道哪個別名被調用。在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

任何幫助,將不勝感激。

+2

你是一個別名的方法 - 聽起來更像是你真正想要生成一個* real *方法,並根據哪種方法被調用。所有的alias_method都是別名的方法。你正在嘗試做一些不同的事情。 –

+0

如果您試圖動態過濾記錄,您可能會發現「Ransack」gem有幫助。 https://github.com/ernie/ransack –

+0

是的我想盡量減少我的模型中的方法。我希望在調用別名的基礎上使用'net_stock_quantity'中的條件。這是更好的方法嗎?如果是的話,告訴我我該怎麼做,如果不是,那就告訴我另一種更好的方法。謝謝。 –

回答

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

method_called事情會包含一個名爲別名的名稱。

1

它認爲你被錯誤地接近問題 - 而不是使用別名方法,通過:equals, :gte, :lte等發送作爲參數的方法,即:

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

Sachnir,如果你通過meta_search文檔,你會清楚我們不能將這些參數(:equals,:gte,:lte)發送到自定義搜索方法,如果我們可以告訴我怎麼做? –

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/

+0

非常好的答案,我相信它也可以。但也有一個簡單的解決方案。我將在該問題的新答案中編寫該解決方案,因爲代碼無法在註釋中正確顯示。 –

相關問題