ruby-on-rails - 评估日期是否不是模型中的过去日期之一——Ruby on Rails

标签 ruby-on-rails ruby datetime validation

我有一个 Day 模型,它有一个日期列。我必须实现日期列不能有过去日期的验证。如果日期是过去的日期,则不得将其保存到数据库中,并在右侧给出适当的错误消息。我知道我可以将此验证放在 Controller 中,但我认为它违反了 MVC 规则,即让业务逻辑远离 Controller 。

有没有办法将此验证放在模型或其他任何地方,如果日期是过去的日期,那么它必须重定向回新操作并显示消息“日期不能是过去的日期”

请帮忙 提前致谢

最佳答案

在你的模型中你需要添加一个验证

validate :not_past_date

def not_past_date
  if self.date < Date.today
    errors.add(:date, 'not in past')
  end
end

在您的 Controller 中,您只需检查保存是否返回 true 或 false。当您不验证您的模型时,将发送 False。如果 false 重定向到另一个 Controller 。

编辑:

正如 Simone Carletti 在评论中所说,您可以使用#past?

validate :not_past_date

def not_past_date
  if self.date.past?
    errors.add(:date, 'not in past')
  end
end

关于ruby-on-rails - 评估日期是否不是模型中的过去日期之一——Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819381/

相关文章:

ruby-on-rails - 为什么 raise_error 匹配器没有按预期工作?

ruby-on-rails - Rails 4 + Devise : Password Reset is always giving a "Token is invalid" error on the production server, 但在本地工作正常。

ruby-on-rails - 如何每天在 rails 中登录一个新文件?

ruby - Module.private_constant 有什么作用?有没有办法只列出私有(private)常量?

ruby - 如何声明一个可在整个 Rails 应用程序中访问的变量?

ruby-on-rails - 无法构建 gem native 扩展

python bson.errors.InvalidDocument : Cannot encode object: datetime. 日期 (2015, 3, 1)

mysql - #1305 - 函数 [表名].ADD_DATE 不存在

ruby-on-rails - ruby/rails 中的日期范围查询

VB.NET 仅获取日期中的年份