我有一个名为@events
的变量,它是Listings
.where(category: 'Tickets')
的集合。来自:events
模型的事件(eager_loaded
)为User
。在我看来,我有:
<% 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
(预加载)吗?如果是这样,最佳解决方案是什么?
答案 0 :(得分:1)
一切都在开发中,但不在生产中
听起来你的数据发生了变化。改变了什么?看看这个:
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>'
订单数组存在,但错误与您的错误相同。换句话说,您的Event
可以通过has_orders?
测试,但您仍然可以获得该错误。您需要弄清楚为什么使用nil值填充事件的orders数组。
为避免错误,您可以写:
orders.each do |order|
order.foo if order
end