

### 前提・実現したいこと

投稿の際に昨日以前に日付設定した場合に投稿できないように機能を実装したい。

railsで指定した日付以降に開ける投稿アプリを作っています。  
上記の機能を実装中に以下のエラーメッセージが発生しました。

### 発生している問題・エラーメッセージ

[code]

    ArgumentError in ItemsController#create
    
    comparison of Time with nil failed
    
[/code]

### 該当のソースコード

[code]

    Ruby
    
    validate :judge_future
    
    private
    
    def judge_future
     return unless  open_day
      if (Time.now + 1.day) >= open_day#もし今日より過去ならerror
       errors.add(:open_day, 'は明日以降に設定してください。')
      end
    end
    
[/code]

対処法がわかる方いましたコメントお願いします。


CC BY-SA 3.0
2018-03-24T07:38:09.397
42627
2018-03-24T08:23:09.947
2018-03-24T08:21:35.220
19110
25422
question
ruby-on-rails ruby
validateについて


comparison of Time with nil failed というエラーは、

[code]

    if (Time.now + 1.day) >= open_day
    
[/code]

の条件判定で起きていると考えられます。なぜなら、質問のコードの中で比較(comparison)が行われているのは、この部分だけだからです。

メッセージを直訳すると「Time と nil の比較に失敗した」ですから、『open_dayがnil』がエラーの原因です。

質問のコードには、open_dayに代入しているところがありません。  
・open_dayに何らかの値を代入する部分が抜けている  
・質問のコードではないところでopen_dayに値が代入されるはずだったが、それが機能していない。  
といった事が考えられます。

質問の『railsで指定した日付』がopen_dayなのだと思われますが、日付を指定している部分のコードが示されていませんので、対処法は誰にも判らないでしょうね。


CC BY-SA 3.0
2018-03-24T08:23:09.947
42629
2018-03-24T08:23:09.947
217
42627
answer