Ruby中未定义的视图中的变量

时间:2010-07-22 20:45:46

标签: ruby-on-rails ruby

我有一个看起来像这样的观点:

<p><%= stage.end_date.strftime("%A, %d %B %Y")%></p>

有时stage.end_date返回null,没关系,但是Ruby会抛出NoMethodError。

我对Ruby很陌生,所以我想知道如何处理视图中缺少/ null的varibles

  • 我是否需要在视图中测试stage.end_date?因为感觉很难看
  • 我需要确认吗? 如果是这样,stage.end_date不为null 这不是我认为的工作吗?
  • 有没有办法可以得到红宝石 担心stage.end_date和 不扔错了吗?

欢迎提供建议

3 个答案:

答案 0 :(得分:7)

只需使用Rails方法试试。基本上这样做:

stage.end_date.try(:strftime,"%A, %d %B %Y")

当end_date为nil时,尝试不会调用该方法,只返回nil。

答案 1 :(得分:5)

你可以这么做,但这里有两个:

<p><%= stage.end_date.strftime("%A, %d %B %Y") unless stage.end_date.nil? %></p>

或在您的舞台模型中,创建:

def end_date_formatted
  return "" if end_date.nil?
  end_date.strftime("%A, %d %B %Y")
end

答案 2 :(得分:1)

问题是在nil对象上调用strftime。这是一个例子:

>> t = Time.now
=> Thu Jul 22 16:52:10 -0400 2010
>> x = nil
=> nil
>> puts t.strftime("%A, %d %B %Y")
Thursday, 22 July 2010
=> nil
>> puts x.strftime("%A, %d %B %Y")
NoMethodError: undefined method `strftime' for nil:NilClass
    from (irb):4

当您对可能为nil的对象调用方法(如strftime)时,您将收到此错误。您可以针对这些情况尝试以下操作:

<p><%= stage.end_date.strftime("%A, %d %B %Y") unless stage.end_date.nil? %></p>

如果不起作用,请将.nil?替换为.blank?

希望有所帮助。