如何检查Ruby中的视图中的对象是否为零?
我想只在设置了一个名为@foo的对象时显示一行文本。 在我看来,我正在尝试这样的事情:
Foo is not a new record or nil
但这失败了,返回You have a nil object when you didn't expect it!
我很确定这是因为new_record?
发生的new_record?
方法。 如何在不导致错误的情况下检查某些内容是否为新记录或为零? 在PHP中,它可以通过询问if(!empty($foo))
但是甚至是empty?
rails中的方法导致返回相同的错误。
有任何想法吗?
怎么样:
<% if !@foo.nil? && !@foo.new_record? %> Hello! <% end %>
首先,你需要在这里使用AND逻辑而不是OR逻辑,因为任何 ActiveRecord对象至少满足一个“not nil”或“not a new record”的要求。
其次,首先检查nil可确保在第一次检查失败时不运行第二次检查。 抛出错误是因为你不能使用#new_record?
在不支持它的对象上,因此首先检查nil可确保该方法永远不会在nil上运行。
您可能也对这些感兴趣:
<%= @foo.text if @foo.present? %>
要么
<%= @foo.text unless @foo.blank? %>
让我为了好玩再举一个答案。
unless @foo.nil? or @foo.new_record? "Hello" end
我会检查if @foo && @foo.id
这将检查是否存在@foo activerecord对象并确保id
字段不为空。 如果id
字段为空,则表示它还不是数据库中的记录。 我假设你在表中使用id
字段。
简单的方法是
<% if !@foo.try(:new_record) %> Hello! <% end %>
当它到达视图时,这个对象可能是nil的原因吗? 有时在视图中添加这样的条件逻辑可以表明某些事情可以被重构,而你只是掩盖了一个更大的问题。
我更喜欢使用andand gem进行这些检查。
if @foo.andand.id "Hello!" end
对.id的调用只能在非零对象上进行。