有人可以解释以下行为吗?他们都应该返回相同的。
@properties.filtros_hash
=> {"casa"=>"sim"}
@properties.try(:filtros_hash)
=> nil
答案 0 :(得分:1)
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),在那里没有这样的方法。