【问题标题】:rails string length validation not workingrails字符串长度验证不起作用
【发布时间】:2012-08-05 05:31:07
【问题描述】:

我一定遗漏了一些基本的东西,但我不断收到验证错误:

app/model/person.rb

class Person < ActiveRecord::Base
  attr_accessible  :cell

  before_validation :format_cell_string

  validates :cell, :length => { :is => 10 }

  protected

    def format_cell_string
      self.cell = self.cell.gsub!(/\D/, '') if self.cell != nil
    end

end

在轨道 c

> bib = Person.new(cell: "1234567890")
> bib.save

导致回滚

围兜错误 =&gt; #&lt;ActiveModel::Errors:0x007fcb3cf978d8 @base=#&lt;Person id: nil, created_at: nil, updated_at: nil, cell: nil&gt;, @messages={:cell=&gt;["is the wrong length (should be 10 characters)"]}&gt;

认为这可能是 Rails 控制台或 irb 错误,我也尝试过我的表单,但无济于事。尝试bib = Person.new, bib.save 然后 bib.update_attributes(cell: "0123456789") 在控制台中也不起作用。我错过了什么吗!我检查了rails docs on validationsrails api on model validations 并尝试了许多不同的方法。有什么想法吗?我使用的是 rails 3.2.6,刚刚升级到 rails 3.2.7。没有变化。

【问题讨论】:

    标签: ruby-on-rails-3 validation ruby-on-rails-3.2


    【解决方案1】:

    gsub!就地修改字符串并返回nilif no changes were made

    "1234567890".gsub!(/\D/, '') #=> nil
    

    因此,在字段仅包含数字的情况下,您的代码会在验证之前将该字段设置为 nil,这会导致验证失败。通常最好避免在属性上使用gsub!,因为它不能很好地与 Rails 的更改跟踪配合使用。

    self.cell = self.cell.gsub(/\D/, '') if self.cell != nil
    

    应该做的伎俩

    【讨论】:

    • 就是这样!很多正面的业力给你送来了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 2018-03-07
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多