5

カスタムバリデーターを自分のモデル 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

バリデーターは app/validators にあるファイルで、以下が含まれています。

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

また、libフォルダー内に配置しようとしましたが、このエラーも発生します:

Routing Error

uninitialized constant Issue::YesNoValidator

ランダムにF5を押すと、時々このエラーが発生します:

NoMethodError in IssuesController#new

undefined method `key?' for nil:NilClass

そのため、クラスを含むファイルがロードされていないように見えるので、lib と app/validators フォルダーの両方を application.rb の autoload_paths に追加してみました。しかし、これもうまくいきません..

誰もこれを経験したことがありますか?

4

2 に答える 2

6

application.rb で、app/validators パスを自動ロード パスに追加します。

config.autoload_paths += [Rails.root.join('app', 'validators').to_s]

または、Issue.rb ファイルでバリデーターを手動で要求します。

于 2013-04-23T16:05:11.963 に答える
3

まだ行っていない場合は、Rails サーバーを再起動して、application.rb の変更が反映されるようにしてください。

于 2014-11-09T22:37:18.933 に答える