ruby-on-rails - 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 以来,这种行为没有改变。
推荐阅读
- javascript - Grouping individual array from one parent array using object's property
- firebase - 没有为“FirebaseAppCheck”类型定义方法“installAppCheckProviderFactory”
- google-cloud-platform - 使用服务帐户创建 Google API 用户
- javascript - 从没有承诺的json url填充数组变量
- web-services - 如何从托管在另一台服务器上的 WebApplication 调用客户端计算机托管的 WcfService?
- indexing - 索引 LUCENE 时偏移量正在向后移动
- javascript - 为什么在 neofetch 上使用 npm 包 ansi-regex 时不过滤“99D”?
- mysql - Mysql Select Query 以查找在两个给定日期之间也部分空闲的项目
- html - 在css网格中调整背景图像的大小,根据它们的宽度显示
- php - 在 Laravel 中,如何使用包含不同值的 foreach 循环更新具有相同用户 ID 的表?