包含与渲染部分的模型关系
Include model relation with render partial
奇怪的行为:
这在视图 (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 %>
undefined method `receipt' for nil: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
却没有
编辑
我重启服务器很多次了。以下是图片:
views/expenses/_expense_model.html.erb:
<%= contract.expenses.find_by(contract_id: 1).receipt.url %>
views/expenses/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) %>
它可能(99% 是)发生只是因为
contract.expenses.find_by(contract_id: 1)
returns nil
, 因为没有这样的 expense
对象与 this particular contract
对象。
您是在说以下内容不起作用,这几乎是不可能的:)
contract = Contract.first
contract.expenses.find_by(contract_id: 1).receipt.url # no way to not work
奇怪的行为:
这在视图 (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 %>
undefined method `receipt' for nil: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
编辑
我重启服务器很多次了。以下是图片:
views/expenses/_expense_model.html.erb:
<%= contract.expenses.find_by(contract_id: 1).receipt.url %>
views/expenses/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) %>
它可能(99% 是)发生只是因为
contract.expenses.find_by(contract_id: 1)
returns nil
, 因为没有这样的 expense
对象与 this particular contract
对象。
您是在说以下内容不起作用,这几乎是不可能的:)
contract = Contract.first
contract.expenses.find_by(contract_id: 1).receipt.url # no way to not work