質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

1205閲覧

rails validateについて

MZ1TB0ZSoVfeX9L

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2018/03/24 07:15

前提・実現したいこと

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

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

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

####ArgumentError in ItemsController#create

comparison of Time with nil failed

該当のソースコード

ruby

1 validate :judge_future 2 3 private 4 5 def judge_future 6 # return unless open_day 7 if (Time.now + 1.day) >= open_day#もし今日より過去ならerror 8 errors.add(:open_day, 'は明日以降に設定してください。') 9 end 10 end

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

たぶん、 open_daynil だった場合の対応が書かれていないのではないでしょうか

例示のために以下、かんたんなコードを書いてみました

何か参考になれば幸いです

実装:

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

投稿2018/03/24 10:20

gouf

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージを見るに、エラーはitemsコントローラーのcreateアクションで引数に関するエラーが発生していると思うんですが、その部分のコードが見当たらないので対処法もわからないです。

投稿2018/03/24 09:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問