2014-01-20 2 views
0

Так сказать, у меня есть объект TimeSlot (который должен представлять собой временной интервал интервью), и у меня есть диапазон раз, когда я хочу, чтобы временные интервалы заполнялись. Скажем, я хочу заполнить временные интервалы завтра с 10 утра до 5 вечера, с шагом 30 минут (т. Е. 14 слотов).Создание объектов базы данных, динамически основанных на `datetime`s?

Объект TimeSlot имеет два атрибута datetime, который представляет время начала и время, которое представляет время окончания.

Я хочу, чтобы администратор моего приложения, чтобы иметь возможность вводить два datetime «с и incrementlength (т.е. 30 минут), и я хочу, чтобы динамически генерировать коллекцию TimeSlot объектов в моей базе данных, которые представляют заданный интервал времени , отрезать до приращения incrementlength минут. Например, TimeSlots, сгенерированные в приведенном выше примере, будут такими:

10AM - 10:30 AM/10:30AM - 11 AM/etc.

Где бы я определил такой метод, как именно я мог бы создать объекты в методе TimeSlot, и как бы я разрешил администратору называть такой метод? Извините, я просто не знаю, с чего начать. Благодарю.

ответ

1

Вы должны определить это в модели, и это будет метод класса, потому что он не назначен одному объекту класса, а самому классу. Я whould решить, как этот

def self.create_by_interval(start_time, end_time, intervall) 
    ((end_time.to_i-start_time.to_i)/(intervall*60)).floor.times do |factor| 
    TimeSlot.create(:start => start_time+(factor*intervall).minutes, :end_time => start_time+((factor+1)*intervall).minutes) 
    end 
end 

При вызове to_i на Дату ее конвертированная в метку времени Unix так end_time.to_i-start_time.to_i вычисляет secounds между дате начала и окончания. Эти секунды делятся на интервал, чтобы определить, сколько объектов требуется. То, что floor методов округляет Float вниз, потому что вы не можете создать 1.99 календарных объектов;)

Я написал это со своей головы, это может быть не идеально, но должно прояснить, как это можно сделать.

// Вам необходимо создать форму, которая отправит необходимые данные. Затем вы можете обрабатывать данные в действии, которое получает введенные данные в хеше params?. Ваша форма может выглядеть следующим образом:

<%= form_for :date_range, :url => working_path_helper do |f| %> 
    <%= f-label :start_time %><br /> 
    <%= f.text_field :start_time %><br /> 
    <%= f-label :end_time %><br /> 
    <%= f.text_field :end_time %><br /> 
    <%= f-label :intervall %><br /> 
    <%= f.text_field :intervall %><br /> 
    <%= f.submit %> 
<% end %> 

Затем в контроллере необходимо вызвать класс метод, как этот:

TimeSlot.create_by_interval(Time.parse(params[:date_range][:start_time]), Time.parse(params[:date_range][:end_time]), params[:date_range][:intervall]) 

Метод Time.parse возвращает объект времени BasedOn строки, потому что вы не можете передать что-нибудь а затем строки по http.

+0

Отлично благодарю вас! Это имеет смысл; однако, как бы я на самом деле назвал этот метод класса? Скажем, у меня есть представление, доступ к которому может получить только мой администратор; я просто создаю форму и устанавливаю входы формы, равной аргументам метода класса? Я просматривал Интернет, но не могу найти окончательного примера этого синтаксически. –

+0

См. Edit, ...... – davidb

Смежные вопросы