【问题标题】:Validating start and end time attributes验证开始和结束时间属性
【发布时间】:2015-09-21 15:30:43
【问题描述】:

我正在尝试验证我认为做起来相当简单的事情。我有两个 time_select 属性“start_time”和“end_time”。我只是想在控制器中验证用户输入的结束时间是等于开始时间还是在开始时间之前。根本不涉及日期。我在下面有一个验证方法,但是无论用户输入什么,它总是出错。

对 Rails 相当陌生,不禁觉得我错过了一些小东西。这种验证应该有效,不是吗?

class Casenote < ActiveRecord::Base
 validate :end_must_be_after_start

 belongs_to :servicelog
 default_scope { order(:id) }


 private

 def end_must_be_after_start
   if :start_time >= :end_time
     errors.add(:end_time, "must be after start time")
   end
 end

end

【问题讨论】:

    标签: ruby validation ruby-on-rails-4 comparison time-select


    【解决方案1】:

    您正在比较两个符号 :start_time:end_time。你需要比较start_timeend_time这两个属性。

    def end_must_be_after_start
      if start_time >= end_time
        errors.add(:end_time, "must be after start time")
      end
    end
    

    【讨论】:

    • 看起来我的另一个“末端”被截断了,为了清楚起见,现在添加了它。
    • 我的印象是这些符号接受了提交的值并验证了它们。我如何提取这些提交的值并在模型中进行比较?模型是比较这些的不正确的地方吗?
    • 创建模型对象时,这些值是该模型中的方法。如果你做了model = Model.new(foo: bar, bar: foo),要获取 foo 或 bar 的值,它将是 model.foo -> bar model.bar -> foo。因此,模型是检查这一点的最佳场所。每次创建或保存模型时,都会运行此验证。
    • 是否可以在我的情况下请求一个示例?我仍然不清楚如何在我的验证中实现上述代码。
    • @NinjaBranDizzle 听起来你会从阅读中受益。查看Active Record BasicsCustom Validations
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多