更新时间: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.