0

基本的なものが欠けているに違いありませんが、検証エラーが発生し続けます。

アプリ/モデル/人.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

ROLLBACK につながる

bib.errors => #<ActiveModel::Errors:0x007fcb3cf978d8 @base=#<Person id: nil, created_at: nil, updated_at: nil, cell: nil>, @messages={:cell=>["is the wrong length (should be 10 characters)"]}>

Railsコンソールまたはirbエラーである可能性があると考えて、私も自分のフォームで試してみましたが、役に立ちませんでした。、 bib.save bib = Person.new、次に bib.update_attributes(cell: "0123456789") を試しても、コンソールでは機能しません。私は何かが足りないのですか!検証に関する Rails ドキュメントモデル検証に関する Rails API を確認し、さまざまなことを試しました。何かご意見は?Rails 3.2.6 を使用していましたが、Rails 3.2.7 にアップグレードしました。変化なし。

4

1 に答える 1

2

gsub!nil 文字列をその場で変更し、変更が行われていない場合は戻ります:

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

したがって、フィールドに数字のみが含まれている場合、コードは検証の前にフィールドを nil に設定しているため、検証が失敗します。on 属性の使用gsub!は、Rails の変更追跡とうまく連携しないため、通常は避けるのが最善です。

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

トリックを行う必要があります

于 2012-08-04T21:22:11.153 に答える