В приложении Rails 3 как разрешить анонимным пользователям доступ к действию контроллера только один раз? - PullRequest
1 голос
/ 07 октября 2011

Например, предположим, у меня есть блог, и любой может прочитать статьи, прочитать комментарии и пометить любой комментарий как неуместный.Как запретить не зарегистрированным пользователям несколько раз щелкать ссылку «Пометить комментарий»?

Ссылка "Flag Comment" будет напрямую связана с методом контроллера для модели Comment.

Я новичок в идее сессий и файлов cookie (а также Rails в целом),Я читал это на Сессиях , но я боюсь, что все еще немного сбит с толку.

Я подумал о создании базового класса с именем Guest, но мне было интересно, смогу ли яИзбегайте этого и вместо этого используйте временные данные сеанса или куки.

Заранее спасибо.

1 Ответ

2 голосов
/ 08 октября 2011

Основная идея может быть следующей (извините, кода пока нет):

  1. Определите, какая информация должна храниться в сеансе и / или файле cookie. Я думаю, что это должно быть id из comment для каждого отмеченного комментария. Храните их в хэш-подобной структуре.
  2. Сделать ссылку на flagging a comment в зависимости от содержимого файла cookie. Примерно так:

    ...
    = link_to('flag comment', flag_comment_path(comment.id)) if ! cookies[:flagged_comments] || ! cookies[:flagged_comments][comment.id]
    
  3. Установить значение хэша cookie, когда комментарий помечен (используйте здесь локальную переменную comment, это должно быть где-то установлено или известно):

    cookies[:flagged_comments] = Hash.new if ! cookies[:flagged_comments]
    cookies[:flagged_comments][comment.id] = comment.id
    

Я не знаю, будет ли работать код, но идея должна быть ясной. И да, делать это только анонимным пользователям (более зависимый пользовательский интерфейс и функциональность контроллера).

Еще одна вещь: я не думаю, что вы должны использовать сеанс и куки для хранения этой информации. И из-за того, что вы должны заметить, когда кто-то помечает комментарий в 2 разных сеансах, используйте только куки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...