如何使用ActiveModel格式验证?

时间:2011-12-21 13:30:33

标签: ruby-on-rails regex ruby-on-rails-3 mongoid activemodel

如果记录在name属性中有空格,我试图阻止保存记录。我正在使用包含ActiveModel的Mongoid,因此它应该与ActiveRecord完全相同。

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

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

以下是我的规格。最后一个失败,我无法弄清楚原因。

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

1 个答案:

答案 0 :(得分:3)

我认为你只需要名字字段中的字符。所以你应该使用:

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

查看结果here。此外,您可以使用invalid使您的测试更流畅,如下所示:

post.should be_invalid

顺便说一下,这是一个品味问题。