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

时间:2011-07-06 17:34:25

标签: ruby-on-rails ruby ruby-on-rails-3

我有以下内容:

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

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

undefined method `widgetable' for nil:NilClass

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

由于

2 个答案:

答案 0 :(得分:4)

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

但你问Object#try,所以:

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

答案 1 :(得分:0)

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

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

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