Rails 3 - Мониторинг панели мониторинга / проблема с аналитикой - PullRequest
1 голос
/ 13 августа 2011

У меня есть следующие ассоциации:

Outlet => has_many :problems
User => has_many :problems
Checkin => belongs_to :outlet, belongs_to :user

При создании Новая регистрация , User_id устанавливается автоматически из идентификатора текущего пользователя, а Outlet выбирается из выпадающего списка (который использует outlet_id):

<%= f.collection_select :outlet_id, Outlet.all, :id, :name %>

Каждый день каждая торговая точка должна проверяться один раз.

Я пытаюсь получить две страницы:

  1. Один, чтобы отобразить все розетки, которые не были проверены сегодня.
  2. Один, чтобы отобразить все розетки, в которых были отмечены сегодня.

Для второй страницы я думал, что мог бы сделать:

Checkin.where('created_at = Date.today')

Но я не уверен, что это лучший способ сделать это? или даже если это сработает? Я понятия не имею, как я буду отображать аутлеты, в которые НЕ было зарегистрировано, поскольку я не уверен, как получить список аутлетов, и проверять каждый из них, если сегодня была произведена регистрация.

Любая помощь будет принята с благодарностью.

UPDATE:

Я думал о том, чтобы настроить его так, чтобы каждый день создавалась регистрация для каждой торговой точки. Но одно из полей (то есть: arrived [которое может быть логическим)) может быть не проверено. И затем, когда проверка сделана, она может просто поставить галочку.

Но тогда есть обратная сторона: создание большого количества записей без необходимости.

1 Ответ

0 голосов
/ 14 сентября 2011

Я действительно не уверен, что есть отличный способ Rails сделать это, но вот моя лучшая попытка:

# All outlet ids into an array
outlets = Outlets.all
outlet_ids = outlets.map(&:id)
# All the outlet ids of the checkins
checked_in = Checkins.where('created_at = Date.today')
checked_in_outlet_ids = checked_in.map(&:outlet_id)
# All outlet ids not in checkins
not_checked_in = outlet_ids - checked_in_outlet_ids

Итак, сначала мы берем все идентификаторы всех возможных выходов.Затем мы запрашиваем, чтобы найти торговые точки, которые были проверены сегодня.Мы используем трюк Proc, чтобы получить массив только идентификаторов в обоих запросах.Затем мы используем разностный оператор в обоих массивах, чтобы вернуть новый массив с именем not_checked_in.Этот массив будет содержать все идентификаторы, которые не проверены сегодня.

...