2013-08-13 8 views
8

enter image description hereRuby on Rails: come ottenere la settimana corrente e visualizzarla a ciclo continuo per visualizzarne i giorni?

L'immagine sopra è ciò che intendo. Credo che il codice dovrebbe essere qualcosa di simile:

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

Ma come ottenere il current week? E come ottenere il name of a day? E per navigare attraverso questo calendario, sono necessari anche pre_week e next_week.

Ho trovato il metodo prev_week e next_week, ma mi sembra di tornare un certo giorno dopo una settimana, che non è necessario.

Una possibile soluzione è here, ma non so come usarlo.

UPDATE: ho trovato una soluzione praticabile, ma ancora alla ricerca di codice migliore:

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

Hai bisogno di più informazioni di questo. Cosa sono @days_from_this_week e @session_categories? Come sono collegati? – vee

+0

'@ days_from_this_week' indica i giorni della settimana corrente, che è quello che sto chiedendo' Come ottenere la settimana corrente'. '@ session_categories' significa che una sessione potrebbe appartenere a diverse categorie (vedi l'immagine della tabella, ci sono session1/2/3/4), quindi devo passarle in rassegna per determinare se una sessione corrisponde alla categoria e quindi visualizzarla. – cqcn1991

+0

'session' appartiene a' category', un 'session' ha un' date' e un 'category' attritube. – cqcn1991

risposta

11

Prova questo nel controller in cui si sta impostando il @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 

Per mostrare ciò che fa:

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

Update per ulteriore richiesta di interrogazione articoli per pubblicati su:

Trova tutti gli articoli tra la data di inizio della mezzanotte t o il giorno dopo.

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

Sì, funziona. Un altro problema: come mostrare un 'day'' ''? Ad esempio, un articolo ha un attributo 'published_on' che è la data in cui viene pubblicato. 'day.article' non funziona. Qualcosa con group_by? – cqcn1991

+0

@ cqcn1991, No, non ti servirà raggruppare per. Si prega di consultare l'aggiornamento sopra per interrogare gli articoli per data. – vee

5

La soluzione è here

Un metodo per la settimana corrente sarebbe qualcosa di simile:

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

Quindi, quando si dispone della matrice giorno, è possibile utilizzare strftime per formattare le date

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

Come posso usare il 'current_week 'per scorrere attraverso per stampare i giorni in esso? come [2013/8/12./2013/8/18] – cqcn1991