在表单中,用户必须选择一个月和一年。我想根据月份确保日期不是。因此,假设当前日期是2016年1月7日,在这种情况下,用户应该可以选择07/2016但不应该选择08/2016。
验证似乎有效,但看起来不太好。有没有更简单的方法 实现这个目标?
validate :founded_in_the_past
def founded_in_the_past
if founded && ((founded.month > Date.current.month && founded.year == Date.current.year)
&& founded.year > Date.current.year)
errors.add :base, "Founding date must be in the past."
end
end
答案 0 :(得分:1)
您可以使用>=
例如
if founded && (founded.month > Date.current.month && founded.year >= Date.current.year)
答案 1 :(得分:1)
而不是使用月份和年份检查,而不是通过使用月份和年份创建日期对象来直接比较日期。
validate :founded_in_the_past
def founded_in_the_past
if founded && (Date.new(founded.year, founded.month, 1) > Date.current)
errors.add :base, "Founding date must be in the past."
end
end
在您的代码中,如果您选择年份为2017
而月份为5
,则可以选择此日期
founded && ((founded.month > Date.current.month &&
founded.year == Date.current.year) &&
founded.year > Date.current.year)
established = true
established.month> Date.current.month = false
established.year == Date.current.year = false
established.year> Date.current.year = true
如果我们根据您的情况进行映射,您的情况将会是
true&& ((false&& false)&& true)
这将返回false,并允许用户选择将来的日期