如何检查Ruby中的视图中的对象是否为零?

Yuv*_*rmi 12 ruby ruby-on-rails

我想只在设置了一个名为@foo的对象时显示一行文本.在我看来,我正在尝试这样的事情:

<% if !@foo.new_record? || !@foo.nil? %>
    Foo is not a new record or nil
<% end %>
Run Code Online (Sandbox Code Playgroud)

但这失败了,返回You have a nil object when you didn't expect it! 我很确定这是因为该new_record?方法而发生的.如何在不导致错误的情况下检查某些内容是否为新记录或为零?在PHP中,它可以通过询问来实现,if(!empty($foo))但即使是empty?rails中的方法也会导致返回相同的错误.

有任何想法吗?

Mat*_*chu 14

怎么样:

<% if !@foo.nil? && !@foo.new_record? %>
  Hello!
<% end %>
Run Code Online (Sandbox Code Playgroud)

首先,你需要在这里使用AND逻辑而不是OR逻辑,因为任何 ActiveRecord对象至少满足一个"not nil"或"not a new record"的要求.

其次,首先检查nil可确保在第一次检查失败时不运行第二次检查.抛出错误是因为您无法#new_record?在不支持它的对象上使用,因此首先检查nil可确保该方法永远不会在nil上运行.

  • `!foo.nil?`让我的大脑流血,因为它可以简单地被`foo`取代.这是一个非常简单和常见的红宝石成语:`if @foo &&!@ foo.new_record?` (4认同)