私は時間データ型の "duration"フィールド(Rails 4.2.6/Ruby 2.2.4アプリケーション)を持つカーディオモデルを持っています。カスタムバリデータのトラブルシューティングを手伝って、ユーザーが10分未満のエアロビックトレーニングを保存できないようにする必要があります。時間を10分未満で拒否するカスタムバリデータを作成する方法
ここに私_form.html.erb内の関連するフィールドがあります:
<%= f.input :duration do %> <br>
<%= f.time_select :duration, :include_blank => true, include_seconds: true %>
<% end %>
はここで
class DurationExceedsTenMinValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless duration_exceeds_ten_min
record.errors[attribute] << "must be at least 10 min"
end
end
private
# Check if duration is greater than or equal to 10 minutes, a.k.a. duration_exceeds_ten_min
# If that's the case, return true, otherwise false.
def duration_exceeds_ten_min
if Time.parse(self.duration.strftime("%H:%M:%S") < "00:10:00")
return false
else
return true
end
end
end
/app/validators/duration_exceeds_ten_min_validator.rbの私のカスタムバリデータのマイcardio_exercise model(cardio_exercise.rb)、私はこれを加えました:
undefined method `duration' for #<DurationExceedsTenMinValidator:0x0000000ef5c4c8>
I「力」真または偽の条件は、カスタムバリデータが正常に動作しているように見えます:コードが実行されると
validates :duration, duration_exceeds_ten_min: true
は
、それは次のようなエラーがスローされます。 if文には何か問題があります。私は立ち往生している。私は条件を正しく設定する方法を理解できません。カスタムバリデータを修正するにはどうすればよいですか?私は助けて&アドバイスを感謝します!
提案された解決策を試しましたが、動作させることができません:バリデータは、継続時間が< or > 10分であるかどうかの保存を防止します。私のコードの文脈であなたの答えを更新できますか?あなたの提案された解決策について何か不足している可能性があります。 – codeinspired
期間がゼロではないと確信していますか?たとえば、パラメータをホワイトリストに登録していない場合などです。 – max
'nil.to_i.seconds == 0.seconds' – max