奇怪的行为:
这适用于视图(A):
<%= Contract.first.expenses.find_by(contract_id: 1).receipt.url %>
#=> Shows default image url
这不在视图(B)中:
<%= contract.expenses.find_by(contract_id: 1).receipt.url %>
未定义的方法`收据&#39;为零:NilClass
B在局部内部,它呈现为:
<% @contract.each do |contract|
<%= render partial: 'expense_modal', locals: { contract: contract } %>
<% end %>
猜猜我不需要确认任何关系,因为 A 工作正常。 B 有问题吗?我正在使用Paperclip。
做Contract.first.expenses.find_by(contract_id: 1).inspect
我得到的是预期但contract.expenses.find_by(contract_id: 1).receipt.inspect
不是这样的
修改
我已经多次重启服务器了。这是图像:
视图/费用/ _expense_model.html.erb:
<%= contract.expenses.find_by(contract_id: 1).receipt.url %>
视图/费用/ show.html.erb:
<% @contract.each do |contract|
<%= render partial: 'expense_modal', locals: { contract: contract } %>
<% end %>
解决方案:
基于Andrey Deineko's条评论,我需要在expense_modal
视图中添加if语句:
<% expense_obj = contract.expenses.find_by(contract_id: contract.id) %>
<% if expense_obj %>
<% receipt_url = expense_obj.receipt.url %>
<% else %>
<% receipt_url = "/assets/receipt/missing-receipt.jpg" %>
<% end %>
然后:
<%= image_tag(receipt_url) %>
答案 0 :(得分:1)
它可能(和99%)只是因为
而发生'main_default'
返回contract.expenses.find_by(contract_id: 1)
,因为没有与此 特定 nil
对象相关的expense
对象。
你说,以下不起作用,这几乎是不可能的:)
contract