在我的rails应用中,user
可以subscribe
到tournament
,但在我需要检查我的用户是否有合适的订阅年龄之前(即他是在右边)类别...... a tournament has_one category
)。所以我写的是:
elsif @tournament.category == "11 ans" && current_user.birthdate.year < 2004
我不喜欢2004年在我的代码中这样写的事实。我想写一些更有活力的东西。 类别的工作方式有点复杂:一个类别是基于从10月1日到次年9月30日的体育赛季。 因此,例如2015年9月30日,我们将从2015年运动季到2016年运动季。根据这个,为11岁的类别写出我的条件的好方法是写这样的东西
elsif @tournament.category == "11 ans" && current_user.birthdate.year < YEAR – 11
其中YEAR是当前的运动年。因此,我需要的是一种使YEAR符合“体育日历”逻辑的方法。想知道这样做的好方法吗?
答案 0 :(得分:0)
为什么不计算创建锦标赛申请参赛资格的界限?例如,&#34;必须在2000年1月1日到2001年12月31日期间为13-15联赛#34;将翻译成这两个日期。
表示为范围:
age_limit = (tournament.birthdate_min..tournament.birthdate_max)
用它来测试:
age_limit.include?(current_user.birthdate)
如果没有年龄上限,请使用1900之类的最小日期。
将描述存储为"11 ans"
然后对其进行硬编码测试会让您遇到麻烦。这是高度语言特定的,加上格式化的任何更改都可能会丢弃您的代码。如果必须,请使用简单的编码方法,或将描述简单化妆,数学部分表示为字段。
答案 1 :(得分:0)
我会改变参赛者的年龄,而不是锦标赛的年龄。因此,当月份大于9时,要么递增current_user.birthdate.year
,要么在小于10时递减,取决于比赛发生时你认为是哪一个。
age = current_user.birthdate.month > 10 ? current_user.birthdate.year + 1 : current_user.birthdate.year