2012-12-13 101 views
0

我有一個簡單的CRUD應用程序,其中包含商品模型的一些基本驗證。那些通過的測試。好的,現在我需要測試一下沒有空格,或者多於一個單詞的名字。我在控制檯中測試了下面的內容,它似乎可以正常工作,因此在導軌上閱讀了我在下面編寫了自定義驗證的驗證。不幸的是,運行我的測試,現在都失敗了,因爲它無法創建商品,因爲它由於我寫的自定義驗證而失敗。我已經嘗試了許多不同的組合方式,將驗證器從Railscasts#211開始,並將其組合到validates調用中。這可能是一件簡單的事情,但如果我拔出對驗證器的調用,那麼其他基本測試就會通過。錯誤是:驗證失敗:產品名稱必須是單個字(的ActiveRecord :: RecordInvalid)Rails 3自定義驗證器'stomps'現有驗證

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,SAM

回答

0

看來這「蹬」是因爲黃瓜引發錯誤年初的時候遇到一個在這種情況下的基本錯誤。感謝@jorendorff指出,將我的< = 1更換爲!= 1使得此測試通過,以及之前的通過也一樣。我不知道這是ruby的反射還是導致之前通過測試的錯誤,我是在無知之中說出來的。我只知道黃瓜至少會拋出誤導到真正原因的錯誤。