Is posible remove a vote from a poll?
I only can change my vote, but I can’t “cancel”
A discussion about implementing an “unvote” feature in polls on Discourse forums was initiated by MiguelAngelLV. It came to light that currently, users can only change their vote, but not cancel it entirely. zogstrip and codinghorror confirmed this limitation. anon23840344 shared a personal experience where they accidentally voted in a poll while trying to highlight text, further emphasizing the need for the “unvote” feature.
sam suggested that it’s time to implement this feature, and zogstrip agreed. A possible design for the feature was proposed, which included adding a “Remove Vote” button after the “Show results” button.
The feature was implemented by nbianca and tested by bletch, who noticed a small, unintended change where the “Show results” button is always enabled, even when there are no votes. However, bletch later found a simpler solution to their problem and decided not to pursue the issue further.
nbianca then reimplemented the original behavior of the “Show results” button and also confirmed that the method signature of DiscoursePoll::Poll.vote was changed during the refactoring of the poll code.
The “unvote” feature is now available, and it seems to work well, according to bletch.
Is posible remove a vote from a poll?
I only can change my vote, but I can’t “cancel”
Not sure if that is possible at the current time.
Nope, there’s currently no way to “unvote” on a poll. Added to my ![]()
Пожалуйста, это нужно реализовать! Я просто пытался выделить текст опроса, чтобы скопировать и вставить (кстати, не понимаю, почему это запрещено), и случайно проголосовал в опросе.
Вы можете сделать это, либо проголосовав повторно, либо в некоторых случаях есть кнопка удаления голоса. Не уверен, является ли это плагином или это теперь доступно.
Я не хотел голосовать за другой вариант. Я воздержался от голосования. Я просто хотел выделить текст с помощью мыши, чтобы скопировать и вставить его.
Привет, есть какие-то новости по этому вопросу? Я получил жалобу от одного из пользователей, который не может отменить свой голос в опросе.
Похожая тема здесь: Ability to remove my choice in a poll
Я всё ещё не думаю, что есть способ, @zogstrip, возможно, стоит поручить это, так как мы планировали это сделать уже давно.
Возможно, первое, что нужно сделать здесь, @designers, — решить, хотим ли мы разрешать это безоговорочно или только для определённых опросов?
Я согласен, пора бы уже.
@nbianca, не могли бы вы добавить это в свой список?
Кажется, мы будем работать только с этим экраном:
Добавьте кнопку «Удалить голос» после «Показать результаты».
Это не повлияет на отображение опросов — нужно зайти в настройки, чтобы найти эти опции.
Я активно использую опросы в своём плагине для сбора структурированных данных от пользователей, поэтому это изменение было бы для меня очень полезным.
Могу ли я попросить, чтобы событие голосования продолжало срабатывать и при удалении голосов, чтобы я мог отслеживать изменения?
Я реализовал функционал отмены голосования в:
Привет! Я только что скачал последнюю сборку в свою среду разработки для тестирования и заметил небольшое, возможно, непреднамеренное изменение.
Это незначительное изменение, но для меня оно важно из-за моего необычного способа использования опросов.
Раньше, если в опросе не было голосов, кнопка «Показать результаты» была неактивна. Это имело смысл: нечего показывать, поэтому кнопку «Показать результаты» не следует нажимать. Выглядело это так…
В новой сборке с функцией «Отмена голоса» кажется, что кнопка «Показать результаты» всегда активна, независимо от того, были ли поданы голоса или нет.
Несколько вопросов: так ли это? Это было намеренно или упущение? Вы планируете вернуть всё как было?
Если всё останется как есть, я попробую другой способ достижения желаемого результата.
В любом случае спасибо за функцию отмены голоса, которая, кажется, работает очень хорошо!
Почему это проблема для меня? Я использую опросы для сбора мнений (в основном) от отдельных пользователей. То есть опрос позволяет мне задавать конкретные вопросы отдельному пользователю в определённом контексте. В опросе редко бывает больше одного голоса, но они значительно упрощают сбор структурированных данных.
В моём плагине тема может содержать множество опросов, и эти опросы могут включать много вариантов, что означает необходимость долгого прокручивания. Чтобы пользователям было проще ориентироваться, после того как они проголосуют, компонент темы, который я написал, удаляет из интерфейса опроса все остальные варианты, оставляя только выбранный пользователем.
Чтобы удалить эти варианты, мой компонент темы находит активную кнопку «Показать результаты» и «нажимает» её. После отображения результатов удаляются все варианты, у которых нет голосов.
В итоге это выглядит так.
В данный момент, поскольку кнопка «Показать результаты» по умолчанию активна, мой код нажимает её, и так как голосов не было, все варианты удаляются, и это выглядит так…
Я только что подумал, как можно было бы подойти к этому иначе, теперь, когда результаты всегда отображаются, и понял, что могу добиться желаемого гораздо проще.
Так что, пожалуйста, оставьте всё как есть! LOL ![]()
Я просто выбираю элементы результатов с классом chosen (или без него .chosen) и скрываю их.
div.poll div.poll-container ul.results > li:not(.chosen) {
display: none;
}
Когда я писал свой код пару лет назад, я либо не заметил класс .chosen, либо он был добавлен недавно?
В любом случае, моё решение было значительно избыточным (опросы на JavaScript!), тогда как этот вариант делает именно то, что мне нужно.

Спасибо ещё раз.
Ой, это моя ошибка. Я только что переделал это, и это скоро будет доступно:
Думаю, так было уже давно.
Просто тестирую сейчас, @nbianca, и кнопка теперь работает как раньше. Спасибо!
Ещё один вопрос: я использую метод DiscoursePoll::Poll.vote для автоматического голосования в опросах. Столкнулся с некоторыми проблемами в своём коде. Могу ли я подтвердить, что в ходе рефакторинга кода опросов вы изменили сигнатуру метода?
Мой код предполагал сигнатуру:
def vote(post_id, poll_name, options, user)
а теперь, после ваших изменений, сигнатура выглядит так:
def self.vote(user, post_id, poll_name, options)
то есть параметр user был четвёртым, а теперь стал первым, и все остальные параметры сдвинулись.
Могу ли я подтвердить, что моё предположение верно, и, по вашему мнению, есть ли другие подобные изменения в результате рефакторинга, которые могут вызвать у меня проблемы?
Кстати, удаление голоса в опросе теперь работает отлично!
Вы правы. Я переместил параметр user на первое место в большинстве функций, так как это общепринятое соглашение, которому мы обычно следуем.
Эта тема была автоматически закрыта через 9 дней. Новые ответы больше не принимаются.