Ruby:如何存储和显示一周中的某一天?
我对Ruby比较陌生。 我需要跟踪我的活动模型中的一周中的某一天。 到目前为止,我所拥有的代码似乎不是最优雅的解决方案。 我想知道是否有更好的方法。
到目前为止,这就是我的forms:
当我需要显示星期几时:
我怎么能做得更好? 随意提及我可能不知道的任何图书馆/gem。
解:
Ruby提供Date::DAYNAMES
常量,它是一周中的几天。 我们可以在代码中重用它:
Ruby的Date
类已经定义了一个常量,它保存数组中的Date::DAYNAMES
名称: Date::DAYNAMES
。
例如,您可以执行以下操作:
days = [] Date::DAYNAMES.each_with_index { |x, i| days << [x, i] }
我不知道我是否一定会说这更好 ,但你绝对可以利用已有的东西。
最简单的方法(RoR)使用内置常量:
Date::DAYS_INTO_WEEK # => {:monday=>0, :tuesday=>1, :wednesday=>2, :thursday=>3, :friday=>4, :saturday=>5, :sunday=>6}
为了保持最简单,我会:
- 保存当天的纯文本名称而不是
@activity.day
的数字 - 添加一个恒定的DAYS,它可以存在于您的Activity模型中,但可能会在未来移动到其他地方
然后它看起来像:
模型
DAYS = ['monday','tuesday',...] validates_inclusion_of :day, :in => DAYS
查看:表格
<%= f.collection_select :day, Activity::DAYS, :to_s, :humanize %>
查看:显示
<%= activity.day.humanize %>
保持简单,如果需要你会延长它:)
在最新版本中,您可以使用该常量定义枚举,然后将其用于不同的事物:
在迁移中,day_of_week是整数
在模型中:
enum :day_of_week => Date::DAYS_INTO_WEEK
然后你可以在模型中使用搜索
Model.day_of_weeks.keys[0..4]
将返回[‘monday’,’tuesday’,….’friday’]
Model.monday
相当于Model.where("day_of_week = ?", 'monday')