たぶん、 open_day
が nil
だった場合の対応が書かれていないのではないでしょうか
例示のために以下、かんたんなコードを書いてみました
何か参考になれば幸いです
実装:
ruby
1# == Schema Information
2#
3# Table name: posts
4#
5# id :integer not null, primary key
6# open_day :date
7# created_at :datetime not null
8# updated_at :datetime not null
9#
10
11class Post < ApplicationRecord
12 validate :not_before_today
13
14 def not_before_today
15 errors.add(:open_day, 'Please set today or after today') if open_day.nil? || open_day < Date.today
16 end
17end
テストコード(RSpec):
ruby
1RSpec.describe Post, type: :model do
2 context 'validate about open_day' do
3 before { Timecop.travel(2018, 1, 2).freeze }
4
5 it 'invalid: when before today' do
6 post = Post.new(open_day: Date.today.advance(days: -1))
7 expect(post).to_not be_valid
8 end
9
10 it 'valid: when today or after' do
11 post = Post.new(open_day: Date.today.advance(days: 1))
12 expect(post).to be_valid
13 end
14
15 it 'invalid: when empty value' do
16 post = Post.new
17 expect(post).to_not be_valid
18 end
19
20 after do
21 Timecop.return
22 end
23 end
24end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。