Как использовать проверки формата ActiveModel?

Я пытаюсь предотвратить сохранение записи, если в атрибуте name есть пробелы. Я использую Mongoid, который включает ActiveModel, поэтому он должен работать точно так же, как ActiveRecord.

class Post
  include Mongoid::Document
  field :name, type: String

  validates :name, presence: true, format: { :with => /\S/ }
end

Вот мои характеристики. Последний 1 терпит неудачу, и я не могу понять, почему.

describe Post do
  describe "validations" do
    # passes
    it "should require a name" do
      post = Post.new name: nil
      post.should_not be_valid
    end

    # passes
    it "should accept valid names" do
      post = Post.new name: "hello-with-no-spaces"
      post.should be_valid
    end

    # fails ?????
    it "should reject invalid names" do
      post = Post.new name: "hello with spaces"
      post.should_not be_valid
    end
  end
end

person David Tuite    schedule 21.12.2011    source источник


Ответы (1)


Я думаю, вам нужны только символы в поле вашего имени. Итак, вы должны использовать:

validates :name, presence: true, format: { :with => /^\S+$/ }

См. результаты здесь. Кроме того, вы можете использовать invalid, чтобы сделать тест более плавным, например:

post.should be_invalid

Кстати, это дело вкуса.

person lucapette    schedule 21.12.2011
comment
Да, это сработало. Я мог бы пойти по любому пути в вопросе be_valid против invalid. В любом случае приятно знать. Спасибо. - person David Tuite; 21.12.2011