Ruby:如何存储和显示一周中的某一天?

And*_*rew 13 ruby ruby-on-rails

我对Ruby比较陌生.我需要跟踪我的活动模型中的一周中的某一天.到目前为止我的代码似乎不是最优雅的解决方案.我想知道是否有更好的方法.

到目前为止,这就是我的形式:

<%= form_for(@activity) do |f| %>
  <div class="field">
    <%= f.label :day %><br />
    <%= f.select :day, [['Sunday', 0], ['Monday', 1], ['Tuesday', 2], ['Wednesday', 3], ['Thursday', 4], ['Friday', 5], ['Saturday', 6]] %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

当我需要显示星期几时:

<% days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] %>
<% @activities.each do |activity| %>
  <%= days[activity.day.to_i] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我怎么能做得更好?随意提及我可能不知道的任何图书馆/宝石.

解:

Ruby提供Date::DAYNAMES常量,它是一周中的几天.我们可以在代码中重用它:

<%= form_for(@activity) do |f| %>
  <div class="field">
    <%= f.label :day %><br />
    <%= f.select :day, Date::DAYNAMES.zip((0..6).to_a) %>
  </div>
<% end %>

<% @activities.each do |activity| %>
  <%= Date::DAYNAMES[activity.day.to_i] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

the*_*eIV 15

Ruby的Date类已经定义了一个常量,它保​​存数组中的日期名称:Date::DAYNAMES.

例如,您可以执行以下操作:

days = []
Date::DAYNAMES.each_with_index { |x, i| days << [x, i] }
Run Code Online (Sandbox Code Playgroud)

我不知道我是否一定会说这更好,但你绝对可以利用已有的东西.