1

我在 Rails 5 项目中使用 Trailblazer 2.1(以及干燥验证(0.11.1))。

我有 2 种不同的语言环境绑定到用户配置文件。

当我动态更改用户的语言环境时 - 干验证不会注意到它 - 并不断产生以前的语言环境的验证错误。

怎么了?这是错误还是功能?为什么干验证不响应语言环境的变化?如何解决?

这是我的语言环境切换代码:

class ApplicationController < ActionController::Base

  before_action :switch_locale

  def switch_locale

    I18n.locale = current_user.locale

  end

end
4

1 回答 1

0

我酸性地找到了解决方案。这只是内部的一个错误dry-validation。我发现并成功地解决了这个问题:

配置/初始化程序/dry_validation.rb

Rails.application.configure do
  Dry::Validation::Schema.configure do |config|
    config.messages = :i18n
  end

  Dry::Validation::Schema::Form.configure do |config|
    config.messages = :i18n
  end
end

# https://github.com/dry-rb/dry-validation/issues/368
# Monkey patch MessageCompiler to make the failing example pass:

module PatchMessageCompiler
  def default_lookup_options
    { locale: messages.default_locale }
  end
end

Dry::Validation::MessageCompiler.prepend PatchMessageCompiler
于 2018-02-18T15:15:44.773 回答