【问题标题】:Mongoid: How can I make Mongoid recognize my custom ActiveModel validations?Mongoid:如何让 Mongoid 识别我的自定义 ActiveModel 验证?
【发布时间】:2011-05-08 03:28:53
【问题描述】:

我有一个模型,它有一个名称数组,我想确保只有一个文档可以有一个给定的名称。我正在尝试编写一个自定义验证来处理这个问题。我的自定义验证和模型现在看起来像这样:

lib/unique_name_validator.rb
class UniqueNamesValidator < ActiveModel::EachValidator
  def validate_each( record, attribute, value )
  end
end
app/models/MyModel.rb
class MyModel
  include Mongoid::Document

  validates :names, :unique_names => true

  field :names, :type => Array
end

但是我得到了未知的验证器:'unique_names'(ArgumentError)。 Mongoid 文档说每个模型都包含 ActiveModel::Validation,我认为这可以让他们使用我的自定义验证。我也尝试过从 ActiveModel::Validator 继承并使用 validates_with 进行验证,但这也不起作用。

【问题讨论】:

    标签: ruby-on-rails validation mongodb mongoid activemodel


    【解决方案1】:

    如果您使用的是 Rails 3,除非您在 application.rb 中添加以下内容,否则您的 unique_name_validator.rb 可能不会自动从 lib 下提取:

    config.autoload_paths += %W(#{config.root}/lib)
    

    【讨论】:

      【解决方案2】:

      自定义验证适用于我的 mongoid,但我需要从我的模型文件中获取它:

      require 'unique_name_validator'
      

      也许有一种方法可以配置 rails/mongoid 以自动选择自定义验证器?

      【讨论】:

        【解决方案3】:

        application.rb 中的自动加载 lib 文件

        config.autoload_paths += %W(#{config.root}/lib)

        或将unique_name_validator.rb 拖放到initializer 文件夹

        【讨论】:

          【解决方案4】:

          为了唯一性,使用:

          validates_uniqueness_of

          (来自http://mongoid.org/docs/validation/

          validates_each 也可以。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-09-21
            • 1970-01-01
            • 1970-01-01
            • 2019-08-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多