2016-06-29 3 views
0

У меня есть приложение для рельсов, которое имеет модель chart, а chart имеет datasource. A datasource может иметь много datapoints. В моем chart create метод у меня есть следующие строки:Модель оценивается до нуля, если объявлено в блоке «if»

@chart = Chart.new(chart_params) 
@chart.datasource = Datasource.find_by_id(2) 
@chart.save 

Это прекрасно работает - хотя это не то, что я пытаюсь сделать. То, что я пытаюсь сделать, это следующее:

if @chart.id == 2 
     @chart.datasource = Datasource.find_by_id(2) 
     @chart.save 
end 

Когда я делаю это, тем не менее, я получаю NoMethodError in Charts#show

undefined method 'datapoints' for nil:NilClass

Ошибка в моем Charts#show генерируется начиная с:

<% @chart.datasource.datapoints.each do |c| %> 
      dates.push("<%= c.date %>") 
      counts.push(<%= c.count %>) 
<% end %> 

Помните, что это работает отлично, если я жестко закодирую идентификатор источника данных за пределами блока if, задаваясь вопросом, что может быть причиной это.

+0

Вы пробовали 'Datasource.find (2)'? – Dawcars

+0

@ Dawcars, да, у меня есть и это дает мне ту же ошибку. По какой-то причине @ chart.datasource равен нулю. Но только если объявлено в 'if'. –

+0

У вас есть карта с id == 2? – Dawcars

ответ

2

Если вы создаете диаграмму, он не получит идентификатор, пока он не будет сохранен. Ваш блок if никогда не будет вызван до тех пор, пока у вас не будет идентификатора. Это означает, что ваш блок if не будет вызван, если вы не сохраните его первым.