现有的验证器不够⽤吗?有几种⽅式可以⾃订验证器:
class User < ActiveRecord::Base
validate :name_validator
private
def name_validator
unless name.starts_with? 'Ruby'
errors[:name] << "必须是 Ruby 开头喔!"
end
end
end
注意:这个⽅法是 validate ,不是 validates 喔。
这种写法满简单的,就是直接写⼀个普通的⽅法(通常会放在 private 区块),
当条件不符规定的时候,就在 errors 这个 Hash 里⾯塞错误讯息。⽤起来就跟⼀
般的验证器差不多:
$ bin/rails console
Running via Spring preloader in process 4628
Loading development environment (Rails 5.0.1)
>> user1 = User.new(name: "孙悟空")
=> #<User id: nil, name: "孙悟空", age: nil, email: nil, created_a
t: nil, updated_at: nil>
>> user1.save
(0.1ms) begin transaction
(0.3ms) rollback transaction
=> false
>> user1.errors.full_messages
=> ["Name 必须是 Ruby 开头喔!"]
class User < ActiveRecord::Base
validates :name, presence: true, begin_with_ruby: true
end
这个验证器可以跟其它内建的验证器⼀起混着使⽤,使⽤起来会更简洁。要写这样
的验证器需要符合 Rails Validator 的命名规则:
class BeginWithRubyValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value.starts_with? 'Ruby'
record.errors[attribute] << "必须是 Ruby 开头喔!"
end
end
end
在使⽤的时候,就是跟⼀般的 validates 差不多:
class User < ActiveRecord::Base
validates :name, begin_with_ruby: true
end
在 rails console 试⼀下效果:
$ bin/rails console
Running via Spring preloader in process 4750
Loading development environment (Rails 5.0.1)
>> user1 = User.new(name: "孙悟空")
=> #<User id: nil, name: "孙悟空", age: nil, email: nil, created_a
t: nil, updated_at: nil>
>> user1.save
(0.1ms) begin transaction
(0.0ms) rollback transaction
=> false
>> user1.errors.full_messages
=> ["Name 必须是 Ruby 开头喔!"]
[为你自己学Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html
iOS这边在取得授权码後,一样准备取得权杖 Modules: struct ShortAccessT...
Google 的文件中,目前写了 33 种不同的结构化资料功能,但有 3 种是实验中,以及有 2 种...
我们前面讲过一些 C# 中的运算符,如,加、减,等等。今天我们补充两个特殊的运算符,is 和 as ...
昨天我们因为安装失败,而改选择前往官网直接下载安装包 那麽我们将"Unity Instal...
格式介绍 通常你的资料会是档案、API接口或是一个连结作为D3输入的资料,这边就以下常见的资料格式简...