在控制台内部,我可以通过这样的方式访问相关的表。
@eec = ExpenseExpenseCategory.last
puts @eec.expense.payee.first_name
-> Charles
但是在模板内部,如果我有某种程度的
<% @expense_expense_categories.each do |eec| %>
<tr>
<td><%= eec.amount %></td>
<td><%= eec.expense.payee.first_name %></td>
<\tr>
<% end %>
在我的报告控制器中设置
def expense_expense_category_report
@expense_expense_categories = ExpenseExpenseCategory.all
respond_to do |format|
format.html {}
format.js {}
end
end
我收到此错误:ActionView :: Template :: Error(未定义的方法`收款人&#39;对于nil:NilClass):
但是,如果我将费用称为
<td><%= eec.expense %></td>
我得到一个关系费用:0x007f9c8ad91b28&gt;但是在尝试访问它的属性
时我得到了同样的错误<td><%= eec.expense.date %></td>
我收到错误ActionView :: Template :: Error(未定义方法`date&#39; for nil:NilClass):
如何确定我可以像在控制台中那样访问方法?
答案 0 :(得分:0)
您的一个或多个类别可能没有与之相关的费用。如果我输入数据然后添加了与模型的关联,这有时会发生在我身上。
这意味着它是nil,并且您在nil对象上调用日期,这会导致您的错误。
您可以通过运行下面的测试代码
在控制台中进行检查ExpenseExpenseCategory.all.each do |eec|
if eec.expense.nil?
puts "Expense category #{eec.id} has no expense"
end
end