2017-01-31 3 views
1

Es gibt eine Liste von Zeilen, die ich aus einer Tabelle auf der Grundlage von Restaurant ID erhalten kann. Für z.B.Zeigen Sie den aktuellen Wert des Tages an der Spitze, gefolgt von anderen Tagen

SELECT id, start_time, end_time, day FROM restaurant_timings WHERE restaurant_id = 2 

Ausgabe sieht wie

1 6:00am 7:00pm Sunday 
2 6:00am 5:00pm Monday 
3 6:00am 4:00pm Tuesday 
4 6:00am 7:00pm Wednesday 
5 6:00am 9:00pm Thursday 
6 6:00am 6:00pm Friday 
7 6:00am 7:00pm Saturday 

Diese Ergebnisse in einem Array @timings zurückgegeben werden. Nun, am Frontend möchte ich diese Ergebnisse nach dem aktuellen Tag zeigen. Mit diesem gesagt, wenn heute ist Mittwoch dann muss ich zeigen Mittwoch an der Spitze und gefolgt von allen anderen Tagen. Ich verwende eine Schleife, um dies zu tun. Hier ist der Schleifencode:

<% @timings.each do |val| %> 
<tr> 
    <td><%= val['day_name'] %></td> 
    <td> 
     <div class="form-group"> 
     <div class='input-group date datetimepicker1' id='datetimepicker1'> 
      <input type='text' class="form-control editabletext" name="openingtime[]" value="<%= if val['opening_time'].present? then val['opening_time'].strftime("%m/%d/%Y %I:%M %p") end %>" readonly/> 
      <span class="input-group-addon"><span class="glyphicon glyphicon-calendar icon-calendar"></span> 
      </span> 
     </div> 
     </div> 
    </td> 
</tr> 
<% end %> 

Sollte/kann ich die SQL-Abfrage ändern, um Front-End-Code komplex zu machen? Irgendwelche Ideen wie kann ich das machen?

+0

Sie will also die Art und Weise zu ändern, die Anordnung bestellt ist, nicht wahr? – Bustikiller

+0

Ja @Bustikiller. Also haben wir die Einträge des aktuellen Tages ganz oben und folgen anderen Tagen. Es wird automatisch täglich geändert. –

+0

Etwas zum Nachdenken: http://rextester.com/UTX11602 – Strawberry

Antwort

2

Es ist einfacher, den Back-End-Code in diesem speziellen Fall zu ändern:

@timings = ActiveRecord::Base.connection.execute %| 
    SELECT id, start_time, end_time, day 
    FROM restaurant_timings 
    WHERE restaurant_id = 2| 

until Date.today.public_send("#{@timings.first.day.downcase}?") do 
    @timings.rotate! 
end 

oder noch besser:

@timings.rotate!(Date.parse(@timings.first.day).wday - Date.today.wday) 
+0

Erhalten dieser: NoMethodError (nicht definierte Methode 'Tag‘ für # ): –

+0

@SatishSaini, feste – Ilya

+0

@Ilya in der Tat , Vielen Dank! – mudasobwa

Verwandte Themen