2

フィールドを空の文字列にすることはできますが、null にすることはできません。

このstackeroverflowの投稿をちょっとした助けに使いました

しかし、私を助けるためにこれ以上見つけることができません。

私の schema.rb ファイルには次のように表示されます。

t.string   "CUSTID",        :limit => 8,     :default => "",     :null => false

これに対して rspec テストを実行すると、validate で null を許可します。私のテスト (下記) が失敗する理由を説明していただけますか?

it 'CUSTID may not be nil' do
  should_not allow_value(nil).for(:CUSTID)
end

次に、これらの検証メソッドをモデルで個別に試しました。

validates :TNCUSTID, :allow_nil => false
validates :TNCUSTID,  :format => {:with => /^(CU)(\d{6})$|(^$)/ }

検証を完全に省略しても

#validates :TNCUSTID, :allow_nil => false

すべてのケースで、「nil であってはならない」テスト ケースが custid で失敗します


私の最終的な目標は、値がこの形式 (上記の正規表現) のいずれかである可能性があり、空の文字列である可能性がありますが、データベースによると、null になることはありません。

誰か教えてください

4

1 に答える 1

1

検証を使用する

validates :TNCUSTID, presence: true
validates :TNCUSTID, :format => {:with => /^(CU)(\d{6})$|(^$)/ }

そしてあなたのテストで

should validate_presence_of :TNCUSTID

そしてメールへ

should validate_format_of(:email).not_with('test@test').with_message(/invalid/)

このStackOverflowの質問から

于 2013-05-06T11:46:21.933 に答える