【问题标题】:Ruby on Rails: How to get the current week and loop through it to display its days?Ruby on Rails:如何获取当前周并循环显示它的日子?
【发布时间】:2013-08-13 02:28:36
【问题描述】:

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

    <% @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 %>

但是如何获得current week?以及如何获得name of a day?要浏览此日历,还需要 pre_weeknext_week

我找到了prev_weeknext_week 方法,但似乎一周后的某一天返回,这不是我需要的。

一个可能的解决方案是here,但我不知道如何使用它。

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

  <!--  @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 %>

【问题讨论】:

  • 需要更多信息。 @days_from_this_week 和 @session_categories 是什么?它们有什么关系?
  • @days_from_this_week 表示本周的天数,这就是我要问的How to get the current week@session_categories 表示一个会话可以属于不同的类别(见表图,有session1/2/3/4),所以我必须循环它们以确定一个会话是否与该类别匹配然后显示。
  • session belongs_to categorysession 有一个date 和一个category 属性。
  • 或者这样说,@days_from_this_week 表示我需要得到all the days(an array) in the current week。例如,[2013/8/12..2013/8/18],所以我可以循环显示每天的会话
  • 最后一条评论对我来说更有意义:)

标签: ruby-on-rails date time calendar


【解决方案1】:

在你设置@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

展示它的作用:

> (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]

更新查询文章的附加请求,发布于:

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

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)

【讨论】:

  • 是的,它有效。另一个问题:如何显示dayarticle?例如,一篇文章有​​一个published_on 属性,即它的发布日期。 day.article 不起作用。与 group_by 有什么关系?
  • @cqcn1991,不,您不需要分组依据。请参阅上面的更新以按日期查询文章。
【解决方案2】:

解决办法是here

本周的方法类似于:

def current_week
  date = Date.today.beginning_of_week
  return (date..date + 6.days).to_a
end

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

day.strftime("%A") # prints weekday name

【讨论】:

  • 如何使用current_week 循环打印其中的日期?喜欢 [2013/8/12..2013/8/18]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 2018-04-20
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多