如果在'中声明,模型评估为nil。块

时间:2016-06-29 14:51:59

标签: ruby-on-rails

我有一个模型chart的导轨应用,而chart有一个datasourcedatasource可能有很多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进行硬编码,那么这可以完全正常工作,想知道是什么原因导致这种情况。

1 个答案:

答案 0 :(得分:2)

如果您要创建图表,则在保存之前不会获取ID。在你拥有id之前,你的if块永远不会被调用。这意味着除非先保存,否则永远不会调用if块。