ruby-on-rails - Rails 嵌套属性 - 并非所有验证都被触发,并且仅在更新现有记录时触发
问题描述
我有一个 Rails 5 应用程序和一个Expenditure
模型:
has_many :expenditure_items, dependent: :destroy
accepts_nested_attributes_for :expenditure_items, allow_destroy: true
validates_associated :expenditure_items
与相关ExpenditureItems
模型:
validates :budget_item_id, presence: { message: "Budget Item required" }
validates :cbs_item_id, presence: { message: "CBS required" }
validates :wbs_item_id, presence: { message: "WBS required" }
validates :description, presence: { message: "Description required" }
validates :quantity, numericality: { message: "Quantity must be a decimal number" }
validates :unit, numericality: { message: "Unit must be a decimal number" }
我有一个嵌套表单,我可以看到正在提交的参数:
"expenditure_items_attributes"=>{"0"=>{"budget_item_id"=>"", "wbs_item_id"=>"5", "cbs_item_id"=>"6", "description"=>"qweqwe", "quantity"=>"1.0", "unit"=>"234.00", "_destroy"=>"false", "notes"=>"", "id"=>"49"}, "1"=>{"budget_item_id"=>"5", "wbs_item_id"=>"77", "cbs_item_id"=>"5", "description"=>"TEst", "quantity"=>"1.0", "unit"=>"1000.00", "_destroy"=>"false", "notes"=>"", "id"=>"47"}}
但是控制器不会抛出budget_item_id
nil 的验证错误。现在,如果我清除任何其他必填字段,验证将与验证一起触发budget_item_id
(即编辑呈现,我得到浏览器验证错误)。:
"expenditure_items_attributes"=>{"0"=>{"budget_item_id"=>"", "wbs_item_id"=>"5", "cbs_item_id"=>"6", "description"=>"", "quantity"=>"1.0", "unit"=>"234.00", "_destroy"=>"false", "notes"=>"", "id"=>"49"}, "1"=>{"budget_item_id"=>"5", "wbs_item_id"=>"77", "cbs_item_id"=>"5", "description"=>"TEst", "quantity"=>"1.0", "unit"=>"1000.00", "_destroy"=>"false", "notes"=>"", "id"=>"47"}}
我知道我可以添加:
validates_associated :expenditure_items
这有效,我的表单验证但我丢失了所有嵌套的验证错误,只是得到一个通用的“无效”错误。
现在我用一个新的嵌套属性对此进行了测试,并且验证正确地触发了——所以只有当我有一个现有的记录时才会发生这种情况。
我在这里遗漏了什么明显的东西吗?
解决方案
推荐阅读
- python - Elasticsearch Service with Cognito -- 如何通过 Python HTTP 请求访问
- javascript - 为什么 next() 不通知订阅者?rxjs
- android - 如何在android中以编程方式添加按钮
- python - Pandas:想要根据开始和结束日期分解数据
- python - 为什么安装在 python 目录中的模块无法识别,但 anaconda3 下的模块是?
- javascript - 如果调用命令的用户提到自己,我希望有一个像 return 这样的回调
- xcode - XCode Clang 格式扩展不工作 Xcode 12.3 MacOS Big Sur
- javascript - 用户输入错误时刷新页面
- python - 如何在我的应用程序中使用 Stripe 支付网关?
- html - 如何处理 VS Code: Port 5500+ 的错误?