Rails - 如何将TRY用于嵌套记录

问题描述 投票:2回答:2

我有以下内容:

:caption => thread.thread_widgets.first.widgetable.title

如果线程有一个thread_widget,这是可选的。鉴于它是可选的,如果线程没有thread_widgets,则此错误

undefined method `widgetable' for nil:NilClass

有没有办法可以使用try(),以便错误不会杀死页面?

谢谢

ruby-on-rails ruby ruby-on-rails-3
2个回答
4
投票
:caption => (o = thread.thread_widgets.first) && o.widgetable.title

但是你要求Object#try,这样:

:caption => thread.thread_widgets.first.try(:widgetable).try(:title)

0
投票

另一个更好的选择是使用安全导航操作员&.如下:

:caption => thread.thread_widgets.first&.widgetable&.title

参考: http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/

© www.soinside.com 2019 - 2024. All rights reserved.