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')

http://api.rubyonrails.org/classes/ActiveRecord/Enum.html