Я думаю, что это дублирование записей в объединениях. Вы должны использовать group_by с соединениями, чтобы устранить это. Попробуйте,
FbGroup.joins(:fb_posts).where('fb_groups.id IN (?)', ids).group('fb_groups.id').length
Пожалуйста, исправьте, если я ошибаюсь.
Код, который я дал вам ранее, прослушал первые два клика и добавил маркер для каждого. Проблема в том, что когда вы перетаскиваете первый маркер, он снова вызывает событие «click» - и, таким образом, добавляет еще один маркер в том же месте.
К счастью, событие click позволяет узнать, есть ли оверлей была нажата. Поэтому выполняйте только тот код, который добавляет новый маркер, если наложение равно нулю. Обратите внимание, что оверлей не является логическим значением.
var listener = GEvent.addListener(map, "click", function(overlay, latlng) {
if (overlay == null) {
// code to add new marker
}
});
У команды Javascript церкви Blackpool Community отличный пример именно этого ( прямая ссылка на четвертый пример ). Посмотрите и их другие примеры.
(отказ от ответственности: я не связан с ними, но многое узнал о GMaps из их примеров)
Редактировать: Я подозреваю, что события на карте запускаются примерно так (псевдокод, для имен реальных событий и т. Д. Проверьте документы GMaps):
Что я бы посоветовал: в функциях перетаскивания красного маркера и маркера-A установите флаг «перетаскивание маркера», сбросьте его в функции драгенджа; в функции «Установить маркер B» установите маркер, только если мы НЕ перетаскиваем что-либо (флаг не установлен).