即使在有条件之后,Nil 的未定义方法
Undefined Method for Nil even after a conditional
我有一个名为 @events
的变量,它是 Listings
.where(category: 'Tickets')
的集合。事件 (:events
) 来自 User
模型 eager_loaded
。在我看来我有:
<% for event in @events do %>
<% if event.has_orders? %>
...
<% orders.each do |order| %>
<%= order.foo %>
<% end %>
...
<% else %>
...
<% end %>
<% end %>
一切都在开发中工作,但在生产中却不行。当我在我的视图中遍历 @events
时,条件被忽略并且 <%= order.foo %>
抛出 undefined method [foo] for nil class
。发生这种情况是因为 :events
是 eager_loaded
(预加载)吗?如果是这样,最佳解决方案是什么?
Everything works in development, but not in production
听起来您的数据已更改。什么改变了?看看这个:
class Order
def foo
puts 'hello'
end
end
order = Order.new
order.foo
orders = [
nil,
nil,
nil,
]
orders.each do |order|
order.foo
end
--output:--
hello
1.rb:18:in `block in <main>': undefined method `foo' for nil:NilClass (NoMethodError)
from 1.rb:17:in `each'
from 1.rb:17:in `<main>'
orders数组存在,但报错和你一样。换句话说,您的 Event
可以通过 has_orders?
测试,但您仍然会遇到该错误。您需要弄清楚为什么用 nil 值填充事件的订单数组。
为避免错误,您可以写:
orders.each do |order|
order.foo if order
end
我有一个名为 @events
的变量,它是 Listings
.where(category: 'Tickets')
的集合。事件 (:events
) 来自 User
模型 eager_loaded
。在我看来我有:
<% for event in @events do %>
<% if event.has_orders? %>
...
<% orders.each do |order| %>
<%= order.foo %>
<% end %>
...
<% else %>
...
<% end %>
<% end %>
一切都在开发中工作,但在生产中却不行。当我在我的视图中遍历 @events
时,条件被忽略并且 <%= order.foo %>
抛出 undefined method [foo] for nil class
。发生这种情况是因为 :events
是 eager_loaded
(预加载)吗?如果是这样,最佳解决方案是什么?
Everything works in development, but not in production
听起来您的数据已更改。什么改变了?看看这个:
class Order
def foo
puts 'hello'
end
end
order = Order.new
order.foo
orders = [
nil,
nil,
nil,
]
orders.each do |order|
order.foo
end
--output:--
hello
1.rb:18:in `block in <main>': undefined method `foo' for nil:NilClass (NoMethodError)
from 1.rb:17:in `each'
from 1.rb:17:in `<main>'
orders数组存在,但报错和你一样。换句话说,您的 Event
可以通过 has_orders?
测试,但您仍然会遇到该错误。您需要弄清楚为什么用 nil 值填充事件的订单数组。
为避免错误,您可以写:
orders.each do |order|
order.foo if order
end