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 以来没有改变。
我最近在我的应用程序中发现了这个错误,我想知道它是否一直存在,或者它是否是从 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 以来没有改变。