且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-11-28 22:16:10

怎么样:

首先,您需要在此处使用 AND 逻辑而不是 OR 逻辑,因为任何 ActiveRecord 对象至少满足非零"或非新记录"的要求.

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

I would like to display a line of text only if an object called @foo is set. In my view, I'm trying something like this:

<% if !@foo.new_record? || !@foo.nil? %>
    Foo is not a new record or nil
<% end %>

But this fails, returning You have a nil object when you didn't expect it! I'm pretty sure this happens because of the new_record? method. How do I check if something is not a new record or nil without causing an error? In PHP, it would be achieved by asking if(!empty($foo)) but even the empty? method in rails causes the same error to be returned.

Any ideas?

How about:

<% if !@foo.nil? && !@foo.new_record? %>
  Hello!
<% end %>

First off, you need to be using AND logic rather than OR logic here, since any ActiveRecord object meets at least one the requirements of "not nil" or "not a new record".

Second, checking for nil first ensures that the second check isn't run if the first one fails. The error is thrown because you can't use #new_record? on an object that doesn't support it, so checking for nil first ensures that that method is never run on a nil.