2016-11-04 4 views
-1

странного поведением:Включают модель отношение с визуализацией частичной

Это работает в представлениях (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 %> 

Guess мне не нужно, чтобы подтвердить какое-либо отношение, как А работает просто отлично. Есть ли проблема с B? Im с использованием Paperclip.

Doing Contract.first.expenses.find_by(contract_id: 1).inspect я получить то, что ожидается, но не так с contract.expenses.find_by(contract_id: 1).receipt.inspect

Редактировать

Я перезапуске сервера много времени. Вот изображения:

enter image description here

enter image description here

enter image description here

просмотров/расходы/_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 зрения:

<% 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

можете ли вы 100% гарантии, что 'контракт == Contract.first'? –

+0

Да. 'contract.inspect' = true. 'contract.id.inspect = true' – Sylar

+0

нет, пожалуйста, покажите мне, что' Contract.first.id == contract.id' => 'true' (который я ставлю' false' –

ответ

1

Это может (и 99% - это просто) использовать

contract.expenses.find_by(contract_id: 1) 

возвращается nil, так как нет таких expense объект, связанный с это частностиcontract объекта.

Вы заявляете, что следующее не работает, что близко к невозможному :)

contract = Contract.first 
contract.expenses.find_by(contract_id: 1).receipt.url # no way to not work 
+0

См. пост, редактировать выше – Sylar

+0

@Sylar, ваше редактирование в порядке и имеет общий смысл. скажем, состоит в том, что '@ contract' содержит некоторые объекты, которые не имеют соответствующих объектов' cost' для указанных критериев. –

+0

@Sylar. Вы делаете '@ contract.each' - просто проверьте, например '@contract.map {| contract | costs.find_by (contract_id: 1)} '- Бьюсь об заклад, вы получите массив, содержащий хотя бы одно значение «nil» –

 Смежные вопросы

  • Нет связанных вопросов^_^