0

商品モデルのいくつかの基本的な検証を備えた単純な CRUD アプリがあります。それらのテストに合格します。OK、今度は名前にスペースがないこと、または複数の単語がないことをテストする必要があります。以下をコンソールでテストしたところ、うまくいくように見えたので、検証に関するレールガイドを読んで、以下にカスタム検証を書きました。残念ながら、私のテストを実行すると、私が書いたカスタム検証が原因で失敗するため、商品を作成できないため、すべて失敗します。Railscasts #211 から始めて、validates 呼び出しにバリデーターを組み合わせることで、バリデーターを組み込むさまざまな組み合わせを試しました。おそらく簡単なことですが、バリデーターへの呼び出しをヤンクアウトすると、他の基本的なテストに合格します。エラー: 検証に失敗しました: 名前は 1 つの単語でなければなりません (ActiveRecord::RecordInvalid)

 require_relative 'commodity_name_validator'
 class Commodity < ActiveRecord::Base
   attr_accessible :description, :name
   has_many :prices
   before_save { |commodity| commodity.name.capitalize! }
   validates :name, presence: true, length: { minimum: 4 }
   validate :commodity_name_validations
 end

 class CommodityNameValidator < ActiveModel::Validator
   def validate(record)
     if record.name.split(" ").length <= 1
       record.errors[:base] << "Name must be a single word"
     end
   end
 end

thnx、サム

4

1 に答える 1

0

この「ストンプ」は、この場合、基本的なエラーが発生したときにキュウリが以前にエラーをスローしたことが原因であると思われます。私の <= 1 を != 1 に置き換えると、このテストが成功し、以前のテストも成功したことを指摘してくれた @jorendorff に感謝します。それがルビーのリフレクションなのか、以前の合格したテストがエラーになる原因なのかはわかりませんが、私は無知から言っています。少なくともキュウリは、本当の原因を誤解させるエラーをスローすることを知っています.

于 2012-12-14T22:27:18.717 に答える