2017-06-13 7 views
1
のメソッド

を見つける、私はかなり正常なActiveRecord::Baseクラスを持って、私は以前、開発者がItemモデルでprice方法を使用している参照が、その方法がどこにあるか、私は見つけることができない、何の列はありませんがpriceと呼ばれますデータベース内では:RailsではRailsの

[40] pry(main)> item.method(:price).source_location 
    NameError: undefined method `price' for class `Item' 
    from (pry):40:in `method' 
    [41] pry(main)> item.price 
    => 80.45 

どのようにですか?

find ./ -type f -name "*.rb" | xargs grep "def price" 

は何も返しません。エイリアスなどはありません。一体どこから来ているのですか?

+1

'def price'ではなく' price'という文字列だけを検索できますか?それは 'method_missing'や宝石に埋もれたものから来るかもしれません。 –

+1

ruby​​は動的メソッドなので、モデルに含まれるいくつかのモジュールでダイナミックメソッドを作成したりメタプログラミングしたり、定義したりすることができます。 – roxxypoxxy

+1

これは試しましたか? 'p item.method(:price)'? – djothefou

答えて

2

あなたはどこからそれが来て迷っている場合は、次のすべてのメソッドは、多くの場合、それらはdefine_methodのようなもの、モジュールのミックスイン、または他のよりエキゾチックなアプローチを使用して生成している、defに由来

item.method(:price).source_location 

ありません。男は、そうだった

0

ありがとう:

def method_missing(symbol, *args) 
    if respond_to?(sym_to_cents_attribute(symbol)) 

列price_in_centsので、それはドルでの価格を返し、存在しています。