2013-08-13 3 views
8

enter image description hereRuby on Rails: Wie bekomme ich die aktuelle Woche und lese sie durch, um ihre Tage anzuzeigen?

Das obige Bild ist was ich meine. Ich denke, der Code so etwas wie sein sollte:

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

Aber wie die current week zu bekommen? Und wie bekommt man die name of a day? Und um durch diesen Kalender zu navigieren, wird auch pre_week und next_week benötigt.

Ich fand prev_week und next_week Methode, aber es scheint wie Rückkehr einen bestimmten Tag nach einer Woche, die ich nicht brauche.

Eine mögliche Lösung ist here, aber ich weiß nicht, wie man es benutzt.

UPDATE: fand ich eine praktikable Lösung, aber immer noch für eine besseren Code suchen:

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

    <% end %> 
+0

Benötigen Sie mehr Informationen als nur dies? Was sind @days_from_this_week und @session_categories? Wie hängen sie zusammen? – vee

+0

'@ days_from_this_week' bedeutet die Tage in der aktuellen Woche, und ich frage 'Wie bekomme ich die aktuelle Woche?'. '@ session_categories' bedeutet, dass eine Sitzung zu verschiedenen Kategorien gehören kann (siehe das Tabellenbild, es gibt session1/2/3/4), also muss ich sie durchlaufen, um festzustellen, ob eine Sitzung der Kategorie entspricht und sie dann anzeigen. – cqcn1991

+0

'Sitzung' gehört zu 'Kategorie', eine' Sitzung' hat ein 'Datum' und eine' Kategorie' attritube. – cqcn1991

Antwort

11

Versuchen Sie dies in Ihrem Controller, wo Sie die @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 
Einstellung sind

Um zu zeigen, was das bedeutet:

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

aktualisieren, um zusätzliche Anfrage Artikel der Abfrage von veröffentlicht am:

Finden Sie alle Artikel zwischen Startdatum Mitternacht t o nächsten Tag.

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) 
+0

Ja, es funktioniert. Ein weiteres Problem: Wie kann man einen "Tag" -Artikel zeigen? Zum Beispiel hat ein Artikel ein 'published_on' Attribut, welches das Veröffentlichungsdatum ist. 'day.article' funktioniert nicht. Etwas mit group_by? – cqcn1991

+0

@ cqcn1991, Nein, Sie brauchen keine Gruppe von. Bitte beachten Sie das obige Update für die Abfrage von Artikeln nach Datum. – vee

5

Die Lösung ist here

Verfahren für die laufende Woche wären so etwas wie:

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

Dann, wenn Sie das Tag-Array haben, können Sie strftime verwenden, um die Daten

zu formatieren
day.strftime("%A") # prints weekday name 
+0

Wie kann ich die 'current_week 'durchschleifen, um die Tage darin auszudrucken? wie [2013/8/12..2013/8/18] – cqcn1991