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

Ruby on rails 视图中的Ruby未定义变量,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个视图,看起来像这样: <p><%= stage.end_date.strftime("%A, %d %B %Y")%></p> 有时stage.end_date返回null,这没关系,但是Ruby抛出了一个NoMethodError 我是Ruby新手,所以我想知道我应该如何处理视图中的缺失/空变量 是否需要在视图中测试stage.end_日期?因为那感觉很难看 我需要确认一下吗 如果是,则stage.end_日期不为空 在我看来那不是工作,是吗

我有一个视图,看起来像这样:

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

有时stage.end_date返回null,这没关系,但是Ruby抛出了一个NoMethodError

我是Ruby新手,所以我想知道我应该如何处理视图中的缺失/空变量

  • 是否需要在视图中测试stage.end_日期?因为那感觉很难看
  • 我需要确认一下吗 如果是,则stage.end_日期不为空 在我看来那不是工作,是吗
  • 有什么办法可以让我得到ruby而不是 担心阶段。结束日期和 不扔一个错误

最受欢迎的建议

您可以通过多种方式来实现,但这里有两种:

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

问题是对nil对象调用strftime。以下是一个irb示例:

>> 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?


希望对您有所帮助。

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

stage.end_date.try(:strftime,"%A, %d %B %Y")
当end_date为nil时,try将不调用该方法,只返回nil

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