我有一个模型chart
的导轨应用,而chart
有一个datasource
。 datasource
可能有很多datapoints
。在我的chart create
方法中,我有以下几行:
@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块之外对数据源id进行硬编码,那么这可以完全正常工作,想知道是什么原因导致这种情况。
答案 0 :(得分:2)
如果您要创建图表,则在保存之前不会获取ID。在你拥有id之前,你的if块永远不会被调用。这意味着除非先保存,否则永远不会调用if块。