奇怪的行爲模型關係:包括與渲染部分
此作品在視圖中(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 %>
未定義方法`收據'爲零:NilClass
B是內部的部分,它的呈現爲:
<% @contract.each do |contract|
<%= render partial: 'expense_modal', locals: { contract: contract } %>
<% end %>
猜猜我不需要確認任何關係作爲一個作品就好了。 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意見,我需要if語句在expense_modal
視圖中添加一個:
<% 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) %>
你可以100%保證,那'合同== Contract.first'? –
是的。 'contract.inspect' = true。 'contract.id.inspect = true' – Sylar
不,請告訴我'Contract.first.id == contract.id' =>'true'(我敢打賭是'false' –