2017-01-31 8 views
1

Существует список строк, которые я могу получить из таблицы на основе идентификатора ресторана. Напр.Показывать текущее значение дня в верхней части, а затем другие дни

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

Выход выглядит как

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 

Эти результаты возвращаются в @timings массива. Теперь, в интерфейсе, я хочу показать эти результаты в соответствии с текущим днем. С учетом сказанного, если сегодня Среда, то мне нужно показать Среда наверху и , а затем все остальные дни. Я использую цикл для этого. Вот код цикла:

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

Должен/Могу ли я изменить SQL-запрос, чтобы не сделать сложный код интерфейса? Любые идеи о том, как я могу это сделать?

+0

Итак, вы хотите, чтобы изменить способ массив упорядочен, верно? – Bustikiller

+0

Да @ Бустикиллер. Итак, у нас есть записи текущего дня наверху, а затем другие дни. Он будет автоматически изменен ежедневно. –

+0

Что-то думать о: http://rextester.com/UTX11602 – Strawberry

ответ

2

легче изменить код бэкэнда в данном конкретном случае:

@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 

или, еще лучше:

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

Как это: NoMethodError (неопределенный метод 'день» для # ): –

+0

@SatishSaini, фиксированная – Ilya

+0

@Ilya действительно , благодаря! – mudasobwa