背景信息: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;。不知道我在这里失踪了什么。这是我失踪的象征问题吗?任何帮助将不胜感激。
答案 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)