-1

Ich arbeite mit einem Kalender und ich denke, dass Kalender nur mit Datum ohne Zeit befasst.Wie bekomme ich Date nur für ein DateTime-Attribut? Arbeiten an einem Kalender

Hinweis: requested_date ist ein DateTime Attribut. Ich möchte alle Reservierungen mit gewünschten Termin bekommen und es bisher verdeckte nur:

users_controller.rb

def myprofile 
    @reservation = Reservation.all 
    @resv_by_date = @reservation.group_by(&:requested_date) <-- make requested_date to date only 
end 

myprofile.html.erb

<div id="admin"> 
<%= calendar do |date| %> 
    <%= date.day %><br> 
     <% @resv_by_date.each do |reservation| %> 
     <%= reservation.requested_date.to_date %><br> 
    <% end %> 
<% end %> 
</div> 

(this month 'May') requested_date is existing on my database (this month 'May') requested_date is existing on my database

image output after the solution of the 1st answer image output after the solution of the 1st answer

+0

Welche Datenbank verwenden Sie? –

+0

@AnthonyE Sqlite .. mein einziges Problem ist auf dem Controller und ich möchte nur das Datum von einem DateTime-Attribut .. –

+0

@AnthonyE \t ich update myprofile.html.erb und sehe neue hochgeladene Ausgabebild .. es gibt ein Problem mit der Schleife. –

Antwort

0

Ich glaube nicht, dass Sie eine group auf Active Beziehung nicht group_by verwenden möchten, die ein Ruby-Methode.

Außerdem ist das Verfahren ein Date von einem DateTime Objekt zu erhalten, ist datetime.to_date:

@reservations_by_date = Reservation.select(:requested_date).group(:requested_date) 

@reservations_by_date.each { |reservation| puts reservation.requested_date.to_date } 
0

Normalerweise würde ich raten Sie zu einer Gruppe in der DB die Daten, um zu versuchen bereits (mit group) aus Performance-Gründen statt von Rubincode (group_by). Aber in Ihrem speziellen Fall scheint es, dass Sie tatsächlich alle Reservierungen im angegebenen Zeitraum (z. B. Monat) abrufen müssen und sie nur nach dem Datum gruppieren, damit Sie alle in der Kalenderansicht anzeigen können. In diesem Fall müssen Sie Ruby-Code tatsächlich gruppieren.

Sie können das einfach tun, indem Sie den Block in group_by Aktualisierung:

@reservations_by_date = Reservation.all.group_by { |res| res.requested_date.to_date } 

Beachten Sie, dass höchstwahrscheinlich die Auswahl nur zu den angegebenen Zeitraum (zB der angezeigte Monat) zuerst verengen Sie wollen, mit where Bedingungen übersprang ich diesen Teil von dieser Antwort.

Die obige Gruppierung erstellt einen Hash der Reservierungen, bei dem die Schlüssel die Daten (nicht die Datumsangaben) sind und die Werte im angegebenen Datum aus Reservierungen bestehen. In der Kalenderansicht können Sie einfach sehen, wenn man sich mit dem Datumsschlüssel zugegriffen hat:

<% calendar do |date| %> 
    <%= date.day %><br> 
    <% @reservations_by_date[date].each do |reservation| %> 
    <%= reservation.name ... or whatever %><br> 
<% end %>