【发布时间】:2015-09-16 21:54:27
【问题描述】:
我有一个名为@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(预加载)吗?如果是这样,最佳解决方案是什么?
【问题讨论】:
-
它会在
event.foo上引发异常,但不会在event.has_orders?上引发异常 -
@eirikir 是的。
has_orders?通过。我正在为.orders.each进行另一次迭代,此时异常被抛出 -
但是如果
event是nil在任何一种情况下都会引发它......错误中“未定义”的方法是什么? -
是的,我的错。我应该提到另一个迭代。编辑了问题。
-
has_orders?是如何定义的?如果您将其替换为event.orders.present?会怎样?
标签: ruby-on-rails ruby activerecord eager-loading