1

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

Ссылка «Комментарий по флагом» будет привязана непосредственно к методу контроллера для модели комментариев.

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

Я решил создать базовый класс под названием Гость, но мне было интересно, могу ли я избежать этого и вместо этого использовать временные данные сеанса или файлов cookie.

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

ответ

2

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

  1. Определите, какая информация должна храниться в сессии и/или печенье. Я думаю, что это должно быть 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. Установите печений хэш-значение, когда комментарий помеченный (используйте здесь локальной переменной comment, это должно быть установлено или известным где-то):

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

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

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

+0

Спасибо за подсказку! Я попытаюсь включить элементы того, что вы сказали в моем коде, и посмотреть, как это работает! –

+1

Не может заставить его работать. Когда я попробовал cookies [: flagged_comments] [id] = id в моем контроллере, я продолжал получать ошибку «Неопределенная локальная переменная или идентификатор метода». Также вы можете объяснить свое заявление if? Для меня это похоже на то, что ссылка будет активна только в том случае, если установлены значения хеш-файла cookie (не должно быть наоборот?). –

+0

Я изменил логику (вы были правы, флаг разрешен, если не установлен ранее). Идентификатор приходит из комментария, поэтому я добавил 'comment.id', чтобы быть понятным, какой идентификатор нужен здесь. – mliebelt

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