如何干掉Rails所需的ruby条件结构

时间:2010-09-17 20:09:47

标签: ruby-on-rails ruby conditional dry

我发现我经常需要使用结构来避免undefined method 'name' for nil:NilClass的Rails错误。

结构如下:

 if country.state
   country.state.name
 end

这似乎是一个经典案例,在一个简单的块中出现两次country.state重复自己。有没有办法干这个?

3 个答案:

答案 0 :(得分:4)

Rails向模仿对象#send的对象添加try method,但如果对象返回nil则不会引发异常。

我认为语法是

country.try(:state).name

答案 1 :(得分:2)

嗯,不是真的。一种选择是安装andand gem,但为此引入依赖可能有点多。

答案 2 :(得分:1)

除了使用稍微简洁的语法:

country.state.name unless country.state.nil?

我不认为用给出的信息干嘛。我认为如果你不能确定country.state是否为nil,你可能需要查看负责设置该值的代码,并确定这是正常情况还是上游验证器应该捕获它。