Rails。不应该返回nil

时间:2017-11-19 15:10:09

标签: ruby-on-rails

有人可以解释以下行为吗?他们都应该返回相同的。

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

@properties.try(:filtros_hash)
=> nil

1 个答案:

答案 0 :(得分:1)

在我的例子中,@ property是一个SimpleDelegator的实例。像这样:

class PropertiesDecorator < SimpleDelegator

    def filtros_hash
        {some_hash: 'hash'}
    end

end

@properties = PropertiesDecorator.new(@properties)

考虑到这一点,并阅读Rails's documentation about .try,我发现了这一点:

  

请注意,try是在Object上定义的。因此,它不会   使用其中没有Object的类的实例   祖先,就像BasicObject的直接子类一样。例如,使用   尝试使用SimpleDelegator将委托尝试到目标而不是   在委托人本身上调用它。

因此,这解释了这种非常意外的行为,因为即使是强硬的PropertiesDecorator也有一个filtros_hash实例方法,通过使用.try,filtros_hash被委托给@properties(ActiveRecord),在那里没有这样的方法。