1

Railsアプリには、Likeモデルがあります。

### like.rb
### Custom Validator Code:
class UniquenessValidator < ActiveModel::Validator
  def validate(record)
      # Empty   
  end
end

class Like < ActiveRecord::Base
  include ActiveModel::Validations
  validates_with UniquenessValidator

  attr_accessible :user_id

  belongs_to :likeable, polymorphic: true
  belongs_to :user
end

RailsコンソールでLike.allを実行しようとしています(現在、Likesテーブルは空です)

1.9.2p320 :001 > Like.all
RuntimeError: :attributes cannot be blank
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activemodel-3.2.3/lib/active_model/validator.rb:141:in `initialize'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activerecord-3.2.3/lib/active_record/validations/uniqueness.rb:7:in `initialize'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activemodel-3.2.3/lib/active_model/validations/with.rb:84:in `new'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activemodel-3.2.3/lib/active_model/validations/with.rb:84:in `block in validates_with'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activemodel-3.2.3/lib/active_model/validations/with.rb:83:in `each'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activemodel-3.2.3/lib/active_model/validations/with.rb:83:in `validates_with'
        from /Users/user/Programming/WWW/Rails/experiments/test_app/app/models/like.rb:3:in `<class:Like>'
        from /Users/user/Programming/WWW/Rails/experiments/test_app/app/models/like.rb:1:in `<top (required)>'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:469:in `load'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:469:in `block in load_file'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:639:in `new_constants_in'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:468:in `load_file'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:353:in `require_or_load'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:502:in `load_missing_constant'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:192:in `block in const_missing'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:190:in `each'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:190:in `const_missing'
        from (irb):1
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
        from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
1.9.2p320 :002 > 

ここで何が起こっているのですか?(ところで、を削除してvalidates_with UniquenessValidatorLike.rb、このエラーは発生しません)

4

2 に答える 2

1

バリデータ MyUniquenessValidator を呼び出します。

UniquenessValidator はアクティブ レコードに既に存在します。この文字列from /Users/user/.rvm/gems/ruby-1.9.2-p320@test_app/gems/activerecord-3.2.3/lib/active_record/validations/uniqueness.rb:7:ininitialize'` はそれについて教えてくれます。

定義済みの ruby​​ および RoR クラス (データ型 ("Complex" など)、Rails バリデーターなど) には注意してください。

于 2012-05-22T19:48:54.950 に答える