mdr*_*iel 5 ruby ruby-on-rails
我有很多模特和关系.由于这个事实,在视图/控制器中有很多调用,如下所示:
@object.something.with_something.value
Run Code Online (Sandbox Code Playgroud)
链的某些部分最终可能是零,这是完全可以的.检查终端对象是否存在的正确/清洁/快速方法是什么?
是这样的:
@object.something.with_something.value if defined? @object.something.with_something.value
Run Code Online (Sandbox Code Playgroud)
认为好吗?
在本地,您需要使用&&运算符(不是defined?),但这可能非常冗长,非常快.
所以不要这样做:
(@object && @object.something && @object.something.with_something &&
@object.something.with_something.value)
Run Code Online (Sandbox Code Playgroud)
您可以在ActiveSupport存在时执行此操作:
@object.try(:something).try(:with_something).try(:value)
Run Code Online (Sandbox Code Playgroud)
或者安装调用构造工具包并使用其保护的评估工具:
Ick::Maybe.belongs_to YourClass
maybe(@object) { |obj| obj.something.with_something.value }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |