2010-09-30 2 views
1

Я делаю сайт в Rails, и я хочу добавить систему голосования вверх/вниз, как здесь, в Stackoverflow.Как создать систему голосования вверх/вниз, такую ​​как stackoverflow?

Может ли кто-нибудь предложить, как это сделать? Я знаю, что я буду вводить каждый голос в базу данных, но я имею в виду, как мне закодировать кнопки голосования? Что я буду использовать, может кто-нибудь мне помочь. Ajax не требуется, но было бы неплохо.

Я собирался попробовать использовать команду POST и сделать что-то вроде этого,

<form name="input" action="/grinders" method="POST"> 
<input type="hidden" name="id" value="<%=h grinder.id %>"> 
<input type="hidden" name="vote" value="up"> 
<input type="submit" value="Vote" /> 
</form> 

Но, я получаю токены ошибки подлинности, и я честно не знаю, как работать с формой помощником.

ответ

5

Имейте votes стол, как так:

[PK] vote_id, vote_type (up/down), [FK] post_id, [FK] user_id, time [optional] 

также добавить score поле к вашей posts таблице

Тогда вы могли бы иметь доступ к кнопке голосовать ссылку, как: /vote/post_id/type/, например: /vote/14098/up. Это можно сделать с Ajax или без него.

Когда вызывается действие по голосованию, проверьте, проголосовал ли пользователь за это сообщение, если да, отрицайте его. Если нет, создайте строку с соответствующими значениями в таблице votes и обновите поле score в таблице posts.

+0

Я думал что-то подобное, но люди не могут что-то взломать? – Rickmasta

+1

Что вы подразумеваете под «взломом»? Не имеет значения, входит ли пользователь в URL напрямую. Вы все равно должны проверить, разрешено ли пользователю голосовать, прежде чем сохранять что-либо в базе данных. – NullUserException

+0

Оберните этот последний абзац в блок транзакций, и вам хорошо идти. – Raphomet

Смежные вопросы