Length validation

接下來是驗證欄位的字串長度。name 最多 50 個字,也就是不能超過 51,而 email 可能會超過字串最大限制 255 個字,所以也要加入驗證。

test/models/user_test.rb

.
.
.
test "name should not be too long" do
  @user.name = "a" * 51
  assert_not @user.valid?
end

test "email should not be too long" do
  @user.email = "a" * 244 + "@example.com"
  assert_not @user.valid?
end

方便測試起見,使用字串連乘(string multiplication),製造出 @user.name 有 51 個字,可以用 Rails console 測試效果:

> "a" * 51
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> ("a" * 51).length
=> 51

@user.email 也是相同道理:

> "a" * 244 + "@example.com"
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[email protected]"
> ("a" * 244 + "@example.com").length
=> 256

執行測試,會失敗,因為還沒加入字串長度驗證功能(Red):

$ bundle exec rake test

現在加入驗證功能:

app/models/user.rb

class User < ActiveRecord::Base
  validates :name,  presence: true, length: { maximum: 50 }
  validates :email, presence: true, length: { maximum: 255 }
end

也就是在 validates 多加一個 length,還有限制最大上線的參數 maximum

再度執行測試,就會成功(Green):

$ bundle exec rake test