2017-11-19 3 views
0

誰かが次のような動作を説明することはできますか?彼らは両方とも同じものを返すべきです。Rails .nilを返さないでください。

@properties.filtros_hash 
=> {"casa"=>"sim"} 

@properties.try(:filtros_hash) 
=> nil 

答えて

1

@propertiesは、私の場合、SimpleDelegatorのインスタンスでした。このような何か:

class PropertiesDecorator < SimpleDelegator 

    def filtros_hash 
     {some_hash: 'hash'} 
    end 

end 

@properties = PropertiesDecorator.new(@properties) 

を念頭に置いていることを持つこと、およびRails's documentation about .tryを読んで、私はこれを発見:

をも試みがオブジェクトで定義されていることに注意してください。したがって、 は、BasicObjectの直接サブクラスのように、先祖の の祖先のうちObjectを持たないクラスのインスタンスでは動作しません。たとえば、 をSimpleDelegatorで試してみると、デリゲーター自体で の代わりにtryをターゲットに委譲します。厳しいPropertiesDecoratorがfiltros_hashインスタンスメソッドを持っているので.try filtros_hash使用することによって、この高度に予期しない動作を説明だから

は、@propertiesそのような方法は存在しない(ActiveRecordの)に委任されています。

関連する問題