ruby 覆盖全局index_errors选项

nszi6y05  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(103)

我使用以下选项配置了 application.rb,以便为嵌套模型上的错误添加索引:

config.active_record.index_nested_attribute_errors = true

字符串
我有许多模型,它工作得很好,但我想在单个模型中更改此行为,如下所示:

# frozen_string_literal: true
class User < ApplicationRecord
  has_many :addresses,
           inverse_of: :user,
           dependent: :destroy,
           index_errors: false #note here
end


然而,它并没有像预期的那样工作,换句话说,错误仍然是这样的:

{"addresses_attributes[0].zip_code":[{"error":"blank"}]}


由于我覆盖了全局配置(或不覆盖),所以我希望这样:

{"addresses_attributes.zip_code":[{"error":"blank"}]}


似乎无法覆盖application.rb中的全局配置。有什么想法吗

tzdcorbm

tzdcorbm1#

代码的编写方式在这里https://github.com/rails/rails/blob/95ad242c8066e71c403d53ea634f347e357473b1/activerecord/lib/active_record/autosave_association.rb#L331
它检查它们中的任何一个是否被设置为true以索引错误。
换句话说,如果设置了全局配置,那么就没有办法为一次性模型关闭它。
更新:您可以通过执行以下操作来更新错误

errors = model.errors.messages
new_errors = {}

errors.each do |key, value|
  next unless key.to_s.include? "addresses_attributes["

  errors.delete key
  new_key = key.to_s.gsub /\[\d+\]/, ""
  new_errors[new_key] = value
end

errors.merge! new_errors

字符串

相关问题