Ruby on Rails:如何获取当前周并循环显示它的日期?

cqc*_*991 10 time calendar ruby-on-rails date

在此输入图像描述

上面的图片就是我的意思.我认为代码应该是这样的:

    <% @days_from_this_week.each do |day| %>
        <%= day.name %>
        <!--e.g. Monday-->
        <% day.sessions do |session| %>
            <% @session_categories.each do |category| %>
                <!--categories means the Sesion1/2/3/4 category
                A day's sessionX could be empty, so we have to determine wheather a session matches its cateogry, 
                and then display it in the table
                -->
                <% if session.category == category %>
                    <%= session.content %>
                 <% end %>
            <% end %>
         <% end %>
    <% end %>
Run Code Online (Sandbox Code Playgroud)

但是如何获得current week?以及如何获得name of a day?并通过这个日历导航,pre_week并且next_week也需要.

我发现prev_weeknext_week方法,但似乎在一周后返回某一天,这不是我需要的.

这里有一个可能的解决方案,但我不知道如何使用它.

更新:我找到了一个可行的解决方案,但仍在寻找更好的代码:

  <!--  @date = params[:date] ? Date.parse(params[:date]) : Date.today
    first=@date.at_beginning_of_week
    last=@date.at_beginning_of_week + 6
    @days= (first..last).to_a-->
    <% @days.each do |day| %>
        <div>
          <%= day %>
        </div>

    <% end %>
Run Code Online (Sandbox Code Playgroud)

vee*_*vee 12

在您正在设置的控制器中尝试此操作 @days_from_this_week

today = Date.today # Today's date
@days_from_this_week = (today.at_beginning_of_week..today.at_end_of_week).map
Run Code Online (Sandbox Code Playgroud)

为了说明这一点:

> (today.at_beginning_of_week..today.at_end_of_week).map.each { |day| day }
> [Mon, 12 Aug 2013, Tue, 13 Aug 2013, Wed, 14 Aug 2013, Thu, 15 Aug 2013, Fri, 16 Aug 2013, Sat, 17 Aug 2013, Sun, 18 Aug 2013]
Run Code Online (Sandbox Code Playgroud)

发布于以下内容的更新到查询文章的其他请求:

查找开始日期的午夜到第二天之间的所有文章.

start_time = Time.parse(date.to_s)
end_time = 1.day.since(start_time)
Article.where('published_on >= ? and published_on < ?', start_time, end_time)
Run Code Online (Sandbox Code Playgroud)


Eri*_*c C 5

解决方案就在这里

本周的方法类似于:

def current_week
  date = Date.today.beginning_of_week
  return (date..date + 6.days).to_a
end
Run Code Online (Sandbox Code Playgroud)

然后,当您有day数组时,可以使用strftime格式化日期

day.strftime("%A") # prints weekday name
Run Code Online (Sandbox Code Playgroud)