自定义验证器未在Ruby on Rails中加载

Sja*_*sma 5 validation model ruby-on-rails

我正在尝试将自定义验证器应用于我的模型issue.rb:

class Issue < ActiveRecord::Base
  attr_accessible :description, :no_followers, :title
  validates_presence_of :title
  validates_uniqueness_of :title, message: "Title should be unique!"

  validates_length_of :description, minimum: 10, maximum: 50
  validates_numericality_of :no_followers, allow_blank: true

  validates_with YesNoValidator

end
Run Code Online (Sandbox Code Playgroud)

验证器是位于应用程序/验证器上的文件,其中包含以下内容:

class YesNoValidator < ActiveModel::Validator
    def validate record
        if record.title.include? "yes" && record.description.include? "No"
            record.errors[:title] << "Title has the word yes and description has the word no"
        end 
    end
end
Run Code Online (Sandbox Code Playgroud)

我也尝试将其放在lib文件夹中,但这也会出现此错误:

Routing Error

uninitialized constant Issue::YesNoValidator
Run Code Online (Sandbox Code Playgroud)

在随机F5'ing中,有时会出现此错误:

NoMethodError in IssuesController#new

undefined method `key?' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

因此,似乎未加载带有该类的文件,因此我尝试将lib和app / validators文件夹都添加到application.rb中的autoload_paths中。但这也不起作用。

有谁之前经历过这个吗?

man*_*noj 6

在您的application.rb中,将app / validators路径添加到自动加载路径

config.autoload_paths += [Rails.root.join('app', 'validators').to_s]
Run Code Online (Sandbox Code Playgroud)

或手动在Issue.rb文件中要求验证器。