首页 > 解决方案 > 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在创建操作中定义

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

标签: ruby-on-railsruby-on-rails-4rails-activerecord

解决方案


如果验证失败,您的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 以来,这种行为没有改变。


推荐阅读