Plots2: Удалите знак "-" перед подсчетом сообщений в карточках тем при сортировке по "количеству людей"

Созданный на 28 мая 2020  ·  25Комментарии  ·  Источник: publiclab/plots2

Опишите проблему

При щелчке по параметру сортировки «Кол-во людей» перед подсчетом сообщений на карточках тем появляется крошечный знак «-», из-за чего создается впечатление, что количество сообщений отрицательное. Смотрите скриншот:

Screen Shot 2020-05-20 at 10 36 42 AM (1)

Что вы ожидали увидеть, чего не увидели?

Я ожидал увидеть положительные целые числа.

Пожалуйста, покажите нам, где искать

https://publiclab.org/tags?sort=followers&order=asc

Какое у вас имя пользователя PublicLab.org?

Это может помочь нам диагностировать проблему:

Лиз

Самый полезный комментарий

Привет, @ebarry, я думаю, что это более серьезная проблема: sweat_smile: я внес изменения для этого здесь https://github.com/publiclab/plots2/pull/7609, но я, должно быть, все испортил и подсчитал неправильный счет. Думаю: разочаровано: Зацикливается на

Все 25 Комментарий

Есть ли у кого-нибудь под рукой ссылки на код, которые они могли бы добавить сюда? Заранее спасибо!

Привет, @ebarry, я думаю, что это более серьезная проблема: sweat_smile: я внес изменения для этого здесь https://github.com/publiclab/plots2/pull/7609, но я, должно быть, все испортил и подсчитал неправильный счет. Думаю: разочаровано: Зацикливается на

Привет, @Tlazypanda, можем ли мы посмотреть другие места, где используется код типа Tag.counter , и попробовать переключиться на него?

https://github.com/publiclab/plots2/pull/7609/files#diff -8fe92870a7f027a46eed82a51c5c16bcR118

Однако счет идет очень мало. Интересно, проблема в том, что некоторые вещи рассылаются спамом, а это немного влияет на математику?

Посмотрите, например, разницу между этими значениями:

image

image

Мы можем посмотреть, где рассчитывается 236 отсчетов, и, может быть, переключиться на это?

Таким образом, используется переменная экземпляра, созданная контроллером:

https://github.com/publiclab/plots2/blob/c056cb0b97ebc6b34184ec3dfa9a83e1096395f9/app/views/tag/show.html.erb#L58

Я считаю, что здесь это рассчитывается:

https://github.com/publiclab/plots2/blob/c056cb0b97ebc6b34184ec3dfa9a83e1096395f9/app/controllers/tag_controller.rb#L551 -L560

Привет, @jywarren , что я вижу в теге /: id, т.е. на странице показа для тега, это то, что мы отображаем только заметки об исследованиях там и в карточках тем, мы пытаемся отображать заметки об исследованиях + вопросы.
Итак, я думаю, что нам нужно получить заметки так же, как мы это делаем в теге # show, и для отображения счетчика в нижней части карточки темы нам просто нужно будет использовать это математическое выражение:
Количество заметок с тэгом - Количество отображаемых заметок в карточке темы

нам нужно получать заметки так же, как в теге # show

Привет, это правильно! отмечая концепцию «единого источника истины» здесь: https://github.com/publiclab/plots2/issues/6855#issuecomment -578331475

Я считаю, что мы должны использовать здесь те же вычисления: https://github.com/publiclab/plots2/pull/7476 (на основе # 6855).

@ urvashigupta7 большое спасибо за участие! Вам было бы интересно внести эти изменения?

Я также считаю, что в https://github.com/publiclab/plots2/pull/7476/ мы не фильтруем спам. Итак, в этих строках мы, вероятно, должны добавить .where(status: 1) :

https://github.com/publiclab/plots2/blob/c056cb0b97ebc6b34184ec3dfa9a83e1096395f9/app/controllers/tag_controller.rb#L551 -L560

От этого также зависит этот код, который не фильтрует спам:

https://github.com/publiclab/plots2/blob/f4dfdcbae4dfa60b0ec357081ee1fae6f2089436/app/models/node.rb#L609 -L618

Точно так же этот код также должен отфильтровывать спам с помощью того же фильтра:

https://github.com/publiclab/plots2/blob/f4dfdcbae4dfa60b0ec357081ee1fae6f2089436/app/models/tag.rb#L118 -L124

Хм. Похоже, что мы фильтруем спам из расчета @total_posts , поскольку он запускается / после / этих строк:

https://github.com/publiclab/plots2/blob/c056cb0b97ebc6b34184ec3dfa9a83e1096395f9/app/controllers/tag_controller.rb#L204 -L218

Однако ни Tag.counter и Node.for_tagname_and_type filter. Может в этом неровность?

Считаю, что здесь все еще не тот счет. Например, https://stable.publiclab.org/tags теперь содержит 692 сообщения для balloon-mapping но вот статистика для этого тега (в стабильной версии):

image

Я думаю, нам нужно полагаться на это исправление: https://github.com/publiclab/plots2/pull/8245

тогда мы сможем это проверить еще раз. Открытие на мгновение ... пальцы 🤞

https://github.com/publiclab/plots2/pull/8245 готово! И есть модульные тесты, так приятно. Хорошо, теперь это может сработать ...

Хорошо, там написано 573 posts » - хм

Заметки исследования 469
Вопросы 37
Вики-страницы 77
Люди 346

Я имею в виду, заметки плюс вики = 546 ...? а плюс вопросов это 583?

Теперь, тестируя тег tests на стабильной версии, я подозреваю, что может происходить какое-то кеширование. Добавление этого тега в новую заметку, https://stable.publiclab.org/notes/aidanswope/05-21-2019/angel-s-point-balloon-map-updated , не привело к тому, что вкладка заметок была От 7 до 8, хотя tag.count возвращает 8, как и результат tag.run_count

https://stable.publiclab.org/tag/tests

и отметив ссылку на https://github.com/publiclab/plots2/issues/8244

Хорошо, поэтому отслеживание количества вкладок:

https://github.com/publiclab/plots2/blob/e97eff7464a544a97f4b38f169f76250600b3148/app/models/node.rb#L621 -L630

Node.where(status: 1, type: 'note').includes(:revision, :tag).references(:term_data, :node_revisions).where('term_data.name = ? OR term_data.parent = ?', 'balloon-mapping', 'balloon-mapping').where.not(nid: qids).count => 470

По сравнению с количеством карточек темы:

NodeTag.joins(:node).where(tid: 10).where('node.status = 1 AND node.type = "note"').where.not(nid: qids).count => 467

😭

Вот три различия: [6129, 7236, 7414] -

[#,

,

]

Очень странно! по 2 причинам: 3 примечания - это не то же самое, что 10 пропущенных (мы еще не рассмотрели вопросы), И эти три кажутся нормальными, за исключением того, что одно было в феврале 2013 года, а 2 - в мае 2013 года:

(обновление: дублирующиеся тэги см. ниже)

Также интересно:

Node.where(status: 1, type: 'note').includes(:revision, :tag).references(:term_data, :node_revisions).where('term_data.name = ? OR term_data.parent = ?', 'balloon-mapping', 'balloon-mapping').where(nid: qids).count => 29

Это согласуется с:

NodeTag.joins(:node).where(tid: 10).where('node.status = 1 AND node.type = "note"').where(nid: qids).count

против 37, как показано на вкладке, который рассчитывается с помощью:

https://github.com/publiclab/plots2/blob/e97eff7464a544a97f4b38f169f76250600b3148/app/models/node.rb#L640 -L646

Ага! Последний раздел показывает, что сообщения с тегами question:balloon-mapping включаются в это количество, даже если они не имеют базового тега balloon-mapping !!!

Следующие 8 сообщений содержат question:balloon-mapping но не balloon-mapping :

[13556, 15762, 16426, 18994, 20694, 11301, 12251, 19625]

Хорошо, это приводит нас к 2 узлам. А теперь просто сравним вручную:

irb(main):040:0> NodeTag.joins(:node).where(tid: 10).where('node.status = 1 AND node.type = "note"').count
=> 496
irb(main):041:0> Node.where(status: 1, type: 'note').includes(:tag).references(:term_data).where('term_data.name = ?', 'balloon-mapping').count
=> 499
irb(main):022:0> Node.where(status: 1, type: 'note').includes(:revision, :tag).references(:term_data, :node_revisions).where('term_data.name = ? OR term_data.parent = ?', 'balloon-mapping', 'balloon-mapping').collect(&:nid)
=> [146, 253, 254, 268, 403, 511, 724, 732, 743, 913, 1482, 1489, 1620, 1626, 1627, 1632, 1715, 1849, 1968, 1994, 2126, 2138, 2144, 2476, 2589, 2930, 3115, 3325, 4649, 4952, 5038, 5220, 5250, 5978, 6934, 7050, 7189, 7294, 7314, 7491, 7577, 7593, 7995, 8189, 8907, 8913, 8914, 8950, 9019, 9032, 9042, 9086, 9417, 9434, 9742, 9888, 9977, 10541, 11019, 11100, 11223, 11574, 11582, 11827, 12201, 12240, 12491, 12619, 12708, 13095, 13424, 13945, 14022, 14095, 14183, 14185, 14219, 14515, 14572, 14587, 14597, 14600, 14611, 14620, 14813, 14907, 14909, 14983, 15545, 15568, 16591, 16653, 16746, 16877, 18316, 19153, 19272, 19462, 19558, 19578, 19620, 19762, 20331, 23549, 24101, 24102, 1795, 6635, 347, 369, 439, 444, 792, 861, 1665, 1668, 1962, 2135, 2143, 2152, 2245, 2277, 2783, 2784, 3563, 3635, 3670, 4482, 4516, 4755, 4760, 4923, 4925, 6059, 7641, 10181, 10489, 11101, 11724, 13243, 13880, 13948, 17322, 64, 166, 202, 344, 1666, 1816, 1818, 1819, 2919, 3354, 3736, 3821, 4087, 8020, 8947, 9301, 11199, 11260, 11261, 11755, 12161, 1544, 1739, 1742, 1892, 2006, 5494, 9353, 10705, 828, 1515, 1786, 1877, 1926, 1949, 2121, 2625, 2666, 2677, 2846, 2892, 2961, 4092, 4907, 5394, 5415, 5664, 7132, 7367, 7368, 7717, 7964, 8400, 10243, 6175, 9507, 4636, 6293, 3014, 6624, 9806, 10289, 10554, 11278, 11391, 12104, 12622, 12894, 13143, 9935, 10036, 10196, 10450, 11283, 11719, 11769, 12237, 10246, 10605, 2462, 9497, 1889, 2131, 2443, 3026, 4127, 4252, 4673, 5538, 5893, 6608, 8034, 8902, 8959, 9644, 9707, 10045, 10162, 10335, 10336, 10337, 10373, 10540, 10570, 11107, 11110, 11112, 11124, 11143, 11175, 11298, 11336, 12053, 12203, 12590, 16984, 19515, 19580, 23822, 2163, 3634, 7620, 10166, 11056, 11319, 11589, 1541, 1652, 1676, 1677, 1746, 2154, 2237, 2275, 2311, 2623, 2785, 3454, 3652, 3822, 4014, 4691, 4720, 4950, 5161, 7785, 8866, 8926, 8928, 8937, 8958, 8986, 9759, 9915, 10101, 10230, 10244, 10302, 10311, 10374, 10523, 10602, 11021, 11078, 11103, 11253, 11726, 11988, 12686, 12752, 12757, 13400, 13845, 14116, 14660, 14713, 14756, 1716, 2660, 7191, 7192, 1743, 1636, 1900, 9317, 10651, 1741, 13904, 3096, 2352, 2824, 4091, 2715, 6080, 6082, 2732, 3801, 3908, 4545, 7121, 10284, 13791, 10631, 4921, 6751, 9429, 9743, 11577, 17331, 6073, 9858, 10711, 11118, 6525, 10267, 9034, 11252, 11268, 8033, 8868, 10159, 10214, 9027, 9785, 9033, 9076, 9299, 14501, 14508, 14562, 21733, 10282, 9909, 11178, 11738, 10024, 12667, 11262, 11343, 11978, 11983, 11992, 11826, 11061, 10227, 10428, 11077, 11131, 11137, 11280, 11281, 11518, 11551, 11807, 11812, 11947, 12039, 14158, 14729, 14943, 15641, 16273, 16349, 18560, 19269, 19286, 21547, 10343, 14852, 14901, 15352, 15387, 10612, 10638, 10986, 10994, 20181, 11002, 11127, 11128, 11183, 12166, 11342, 11494, 11955, 11673, 11707, 11711, 12190, 18839, 13802, 14595, 12227, 15912, 14007, 13093, 13096, 12981, 13102, 13160, 13194, 13196, 13227, 13242, 13267, 13278, 13281, 13298, 14168, 15161, 23143, 14058, 14766, 13748, 13839, 15603, 14241, 14179, 14239, 14246, 14240, 14255, 14488, 14487, 14245, 14785, 15160, 14703, 14995, 16571, 15172, 15179, 15424, 15713, 15732, 16141, 16284, 16334, 16382, 17387, 17498, 17499, 18498, 16960, 19689, 17815, 19394, 19464, 19650, 19955, 19476, 19477, 23203, 6129, 7236, 7414]

против:


irb(main):024:0> NodeTag.joins(:node).where(tid: 10).where('node.status = 1 AND node.type = "note"').collect(&:nid)
=> [146, 253, 254, 268, 403, 511, 724, 732, 743, 913, 1482, 1489, 1620, 1626, 1627, 1632, 1715, 1849, 1968, 1994, 2126, 2138, 2144, 2476, 2589, 2930, 3115, 3325, 4649, 4952, 5038, 5220, 5250, 5978, 6934, 7050, 7189, 7294, 7314, 7491, 7577, 7593, 7995, 8189, 8907, 8913, 8914, 8950, 9019, 9032, 9042, 9086, 9417, 9434, 9742, 9888, 9977, 10541, 11019, 11100, 11223, 11574, 11582, 11827, 12201, 12240, 12491, 12619, 12708, 13095, 13424, 13945, 14022, 14095, 14183, 14185, 14219, 14515, 14572, 14587, 14597, 14600, 14611, 14620, 14813, 14907, 14909, 14983, 15545, 15568, 16591, 16653, 16746, 16877, 18316, 19153, 19272, 19462, 19558, 19578, 19620, 19762, 20331, 23549, 24101, 24102, 1795, 6635, 347, 369, 439, 444, 792, 861, 1665, 1668, 1962, 2135, 2143, 2152, 2245, 2277, 2783, 2784, 3563, 3635, 3670, 4482, 4516, 4755, 4760, 4923, 4925, 6059, 7641, 10181, 10489, 11101, 11724, 13243, 13880, 13948, 17322, 64, 166, 202, 344, 1666, 1816, 1818, 1819, 2919, 3354, 3736, 3821, 4087, 8020, 8947, 9301, 11199, 11260, 11261, 11755, 12161, 1544, 1739, 1742, 1892, 2006, 5494, 9353, 10705, 828, 1515, 1786, 1877, 1926, 1949, 2121, 2625, 2666, 2677, 2846, 2892, 2961, 4092, 4907, 5394, 5415, 5664, 7132, 7367, 7368, 7717, 7964, 8400, 10243, 6175, 9507, 4636, 6293, 3014, 6624, 9806, 10289, 10554, 11278, 11391, 12104, 12622, 12894, 13143, 9935, 10036, 10196, 10450, 11283, 11719, 11769, 12237, 10246, 10605, 2462, 9497, 1889, 2131, 2443, 3026, 4127, 4252, 4673, 5538, 5893, 6608, 8034, 8902, 8959, 9644, 9707, 10045, 10162, 10335, 10336, 10337, 10373, 10540, 10570, 11107, 11110, 11112, 11124, 11143, 11175, 11298, 11336, 12053, 12203, 12590, 16984, 19515, 19580, 23822, 2163, 3634, 7620, 10166, 11056, 11319, 11589, 1541, 1652, 1676, 1677, 1746, 2154, 2237, 2275, 2311, 2623, 2785, 3454, 3652, 3822, 4014, 4691, 4720, 4950, 5161, 7785, 8866, 8926, 8928, 8937, 8958, 8986, 9759, 9915, 10101, 10230, 10244, 10302, 10311, 10374, 10523, 10602, 11021, 11078, 11103, 11253, 11726, 11988, 12686, 12752, 12757, 13400, 13845, 14116, 14660, 14713, 14756, 1716, 2660, 7191, 7192, 1743, 1636, 1900, 9317, 10651, 1741, 13904, 3096, 2352, 2824, 4091, 2715, 6080, 6082, 2732, 3801, 3908, 4545, 7121, 10284, 13791, 10631, 4921, 6751, 9429, 9743, 11577, 17331, 6073, 9858, 10711, 11118, 6525, 10267, 9034, 11252, 11268, 8033, 8868, 10159, 10214, 9027, 9785, 9033, 9076, 9299, 14501, 14508, 14562, 21733, 10282, 9909, 11178, 11738, 10024, 12667, 11262, 11343, 11978, 11983, 11992, 11826, 11061, 10227, 10428, 11077, 11131, 11137, 11280, 11281, 11518, 11551, 11807, 11812, 11947, 12039, 14158, 14729, 14943, 15641, 16273, 16349, 18560, 19269, 19286, 21547, 10343, 14852, 14901, 15352, 15387, 10612, 10638, 10986, 10994, 20181, 11002, 11127, 11128, 11183, 12166, 11342, 11494, 11955, 11673, 11707, 11711, 12190, 18839, 13802, 14595, 12227, 15912, 14007, 13093, 13096, 12981, 13102, 13160, 13194, 13196, 13227, 13242, 13267, 13278, 13281, 13298, 14168, 15161, 23143, 14058, 14766, 13748, 13839, 15603, 14241, 14179, 14239, 14246, 14240, 14255, 14488, 14487, 14245, 14785, 15160, 14703, 14995, 16571, 15172, 15179, 15424, 15713, 15732, 16141, 16284, 16334, 16382, 17387, 17498, 17499, 18498, 16960, 19689, 17815, 19394, 19464, 19650, 19955, 19476, 19477, 23203]

Ага. Может быть, это:

Tag.where(name: 'balloon-mapping').length => 4
Tag.where(name: 'balloon-mapping').collect(&:tid) => [10, 3205, 3591, 4032]

Да вот и несоответствие:

irb(main):045:0> NodeTag.joins(:node).where(tid: [10, 3205, 3591, 4032]).where('node.status = 1 AND node.type = "note"').count
=> 499
irb(main):046:0> Node.where(status: 1, type: 'note').includes(:tag).references(:term_data).where('term_data.name = ?', 'balloon-mapping').count
=> 499

irb(main):050:0> Tag.where(name: 'balloon-mapping').collect(&:count)
=> [574, 1, 1, 1]

Однако, особенно не для ошибок method или project в # 7334

irb(main):047:0> Tag.where(name: 'method').collect(&:tid)
=> [14474]
irb(main):048:0> Tag.where(name: 'project').collect(&:tid)
=> [14751]

Хорошо, я исправил повторяющиеся теги с помощью:

irb(main):053:0> NodeTag.where(tid: [3205, 3591, 4032]).each do |nt|
irb(main):054:1* nt.tid = 10
irb(main):055:1> nt.save
irb(main):056:1> end

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

Обновление: да, есть еще 28 экземпляров:

irb(main):063:0> Tag.count
=> 18532
irb(main):065:0> Tag.all.collect(&:name).uniq.count
=> 18504


irb(main):069:0> (Tag.all - Tag.all.group(:name)).collect(&:name)
=> ["fold-up", "gulf-coast", "kite-mapping", "gulf-coast", "brooklyn", "new-york-city", "balloon-mapping", "spectrometer", "farmhack", "white-balance", "fresh-kills", "balloon-mapping", "balloon-mapping", "kite-mapping", "newsletter", "newsletter", "passenger-pigeon", "jamaica-bay", "mobile-spectrometer", "infragram-sandbox", "mailing-lists", "diy-kite", "water-sensing", "carbon-arc", "diy-kite", "diy-kite", "workplace", "emergencies"]

Моя рекомендация сейчас:

Мы сильно сузили этот вопрос, и он состоит из двух частей.

  1. «Призрачные» теги - дублируются теги, поэтому в основном некоторые из них не учитывались (решено, хотя для некоторых других тегов существует ~ 15 других экземпляров)
  2. Теги формата question:_____ , которые подсчитываются на вкладке вопросов на страницах /tag/____ , но если у них нет собственного базового тега, не учитываются в карточках тем. Пример: 8 сообщений имеют question:balloon-mapping но не balloon-mapping , поэтому они сбрасывают наш счет на 8.

Я считаю (2), что мы должны записать это и знать об этом, но не решать его (в любом случае я не могу придумать чистое решение).

И даже после всех этих копаний у меня все еще есть расхождение в 1 для balloon-mapping . Но я думаю, что мы настолько близки, что, по сути, должны быть согласны с этим, поскольку это один из самых крупных тегов, и эта проблема вряд ли затронет другие. Интересно услышать мнение других!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги