导致符号问题?错误:未定义的方法`[]'为零:NilClass

时间:2015-11-01 16:52:05

标签: ruby-on-rails

背景信息:A Deal有许多优惠券(@freeDeals包含所有优惠券)和优惠券belongs_to a Deal。

控制器:

 @freeCoupons = Coupon.where(discount: 100).order("created_at DESC").page(params[:page])
 @deals = Deal.all

下面的代码与我想要的完全一样,并找到交易的标题(在测试中硬编码为2)

<% @freeCoupons.each do |f| %>
      <%= @deals[2][:title] %>

 <% end %>

但是,当我通过f.deal_id将其切换到试图通过优惠券关联找到交易的标题时

<% @freeCoupons.each do |f| %>
      <%= @deals[f.deal_id][:title] %>

<% end %>

它给了我这个错误&#34;未定义的方法`[]&#39;为零:NilClass&#34;。不知道我在这里失踪了什么。这是我失踪的象征问题吗?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

在您的优惠券模型中

belongs_to :deal

然后在您的控制器中,使用includes添加交易 - 这将确保您不会进行N + 1查询:

@free_coupons = Coupon.includes(:deal).where(discount: 100).order("created_at DESC").page(params[:page])

现在在您看来,您只需在deal个实例上调用Coupon方法:

@free_coupons.each do |f|
  <%= f.deal.title %>
end

答案 1 :(得分:1)

deal_id是数据库中的id,它不是数组中的索引。 deal_id可以比元素的数量大得多。在您尝试访问nil

时,获得title,以及您的错误

您可以通过ID找到对象

Deal.find(f.deal_id)