rails 4 中的空引用错误而不是验证错误

null reference error instead of validation error in rails 4

我最近在我的应用程序中发现了这个错误,我想知道它是否一直存在,或者它是否是从 rails 3 升级到 4 的一部分。(或者只有我)

在我对控制器的新操作中,我加载了表单视图中需要的值列表 (@workers)。

 def new
    @hour = Hour.new
    @hour.job_id = params[:job_id]    

    @workers = Worker.inactive(false).order(:name)

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @hour }
    end
  end

我的 Hour 模型上有一个必填字段,如果我在空的情况下离开,我会收到验证错误。而是在 @workers.collect..

上获得空引用

如果我将 @workers 添加到我的创建操作中,它会触发验证警告。

但是我觉得很奇怪,我需要在创建操作中定义 @workers

这是预期的行为还是我搞砸了其他事情?

如果验证失败,您的 create 操作将尝试呈现 new 模板。但是 new 模板,如您所写,依赖于 @workers 变量,在本例中为 nil,因为您没有在 create 中设置它。这里没有什么意外。您也需要在 create 中(或之前)设置此变量,例如:

before_action :set_workers, only: %i[new create]

# ...
private

def set_workers
  @workers = Worker.inactive(false).order(:name)
end

这种行为至少自 Rails 2 以来没有改变。