首页 > 解决方案 > Ruby on Rails 4:有效吗?总是返回真

问题描述

我正在尝试在我的课堂上使用验证器来验证我的 API 上的信息。但是当我调用valid时它总是返回true?

你知道为什么吗?我正在使用 Rails 4。

class Address
   include ActiveModel::Model
   include ActiveModel::Validations
   include ActiveModel::AttributeMethods

   attr_accessor :street

   validates :street, length: { minimum: 10, maximum: 100 }
end

address = Address.new
address.street = 'aa'
address.valid? (returns true)

标签: ruby-on-railsruby

解决方案


我无法使用 Rails 4.2.10 重现这一点。也许你需要升级到 Rails 4.2.latest???

Loading development environment (Rails 4.2.10)

Frame number: 0/5
[1] pry(main)> class Address
[1] pry(main)*   include ActiveModel::Model   
[1] pry(main)*   include ActiveModel::Validations   
[1] pry(main)*   include ActiveModel::AttributeMethods   
[1] pry(main)*   
[1] pry(main)*   attr_accessor :street   
[1] pry(main)*   
[1] pry(main)*   validates :street, length: { minimum: 10, maximum: 100 }   
[1] pry(main)* end  
=> {:length=>{:minimum=>10, :maximum=>100}}
[2] pry(main)> a = Address.new
=> #<Address:0x00007fb728c42b10>
[3] pry(main)> a.street = 'aa'
=> "aa"
[5] pry(main)> a.valid?
=> false
[6] pry(main)> a.errors
=> #<ActiveModel::Errors:0x00007fb728bafce8
 @base=#<Address:0x00007fb728c42b10 @errors=#<ActiveModel::Errors:0x00007fb728bafce8 ...>, @street="aa", @validation_context=nil>,
 @messages={:street=>["is too short (minimum is 10 characters)"]}>

推荐阅读