Временные данные с помощью Rails / Active Record - PullRequest
2 голосов
/ 23 октября 2009

Я ищу идеи / информацию об управлении временными данными с помощью Active Record (Rails). В качестве примера можно привести историю emplyoment (100% работали в январе, но только 80% с февраля по настоящее время). Вероятно, это будет легко решить с помощью традиционного «has-many: eployment_parts». Но есть еще один случай, когда пользователь может спланировать что-то вроде списка задач, который пользователь может изменять с течением времени (эта задача действительна с января по март, другая действует с января по апрель, а затем с измененными деталями с мая по август ).

Я знаю, что для таких требований не существует решения «серебряной пули», но я хотел бы собрать здесь некоторые идеи / документы / плагины по этой теме. Похоже, что в этой области для рельсов мало что сделано, по крайней мере, ничего, что стало достоянием общественности.

Пожалуйста, если у вас есть идея, ссылка или мысль, напишите короткий ответ!

Ссылки на данный момент:

Ответы [ 3 ]

3 голосов
/ 19 марта 2014

у нас была необходимость хранить исторические данные обо всех изменениях в записях базы данных и иметь возможность запрашивать данные своевременно, не влияя на производительность запроса текущих данных.

Предусмотренное нами решение - медленно изменяющийся тип измерения 2 с таблицами истории. Реализация представляет собой драгоценный камень Ruby, который требует PostgreSQL 9.3 и прекрасно вписывается в Active Record, расширяя его временной структурой (например, Foo.as_of(1.year.ago).bars).

Вы можете найти код здесь: https://github.com/ifad/chronomodel: -)

1 голос
/ 23 октября 2009

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

Например, какое «разрешение» вам нужно? Планируете ли вы записывать каждый рабочий час каждого дня? Или просто средняя ежемесячная нагрузка? Может, за неделю?

Кроме того, что вы хотите делать с праздниками и больничными?

(РЕДАКТИРОВАТЬ - отвечая на комментарий ниже)

В вашем случае я бы выбрал модель, подобную этой:

class WorkSlice < ActiveRecord::Base
  belongs_to :employee
  validates_presence_of employee_id, start_date, end_date, percentage

  def calculate_hours
    #employees might have different hours per day (i.e. UK has 7, Spain has 8)
    employee.hours_per_day * self.calculate_days
  end

  def calculate_days
    #days between start_day and end_day that are not sick days, holidays or weekends
    workdays = ... #this depends on how you model holidays, etc
    return workdays * self.percentage
  end
end

Насколько я знаю, единственное, что вам нужно - это "сотрудник". Например, метод наемного работника позволит вам увидеть, насколько «свободен» этот сотрудник на данную дату.

0 голосов
/ 23 октября 2009

«Я знаю, для таких требований не существует решения для« серебряной пули »»

Это немного зависит от того, насколько серебристой должна быть ваша пуля.

Так или иначе. Вам также могут понравиться следующие вещи:

(a) «Обзор и анализ TSQL2» Хью Дарвена и С.Дж. Дейта. Ссылка находится на www.thethirdmanifesto.com в разделе «Документы» внизу. (б) «Временные данные и реляционная модель», полная книга тех же авторов плюс Никос Лоренцос. Содержит другое, полное предложение и очень убедительные обоснования того, почему они считают это предложение лучше. (c) Вы можете найти реализацию под названием SIRA_PRISE, написанную мной, на основе идей из (b), на shark.armchair.mb.ca/~erwin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...