2016-06-29 3 views
0

モデルがchartで、chartのレールアプリがdatasourceです。 datasourceには、多くの場合、datapointsが含まれている場合があります。 - それは私が何をしようとしているではありませんが、これは正常に動作します'if'ブロック内で宣言されているとモデルは評価されません

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

:私のchart create方法で、私は次の行を持っています。私は何をしようとしていることは以下の通りです:

:私は、しかし、私は私の Charts#showNoMethodError in Charts#show

undefined method 'datapoints' for nil:NilClass

エラーが出ることを行うと

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

で始まる生成されます

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

ifブロックの外側でデータソースIDをハードコードすると、これは完璧に機能します。原因は何かこれ

+0

'Datasource.find(2)'を試しましたか? – Dawcars

+0

@Dawcars、はい私は持っており、それは私に同じエラーを与えます。何らかの理由で@ chart.datasourceはnilです。しかし、 'if'の中で宣言されている場合に限ります。 –

+0

id == 2のグラフがありますか? – Dawcars

答えて

2

グラフを作成している場合、保存されるまではIDは取得されません。 ifブロックはあなたがIDを持つまで呼び出されません。つまり、最初に保存しない限り、ifブロックは呼び出されません。

関連する問題