проверка правильности создания по post_id и ip_address - Ruby on Rails - PullRequest
0 голосов
/ 17 апреля 2010

Я создал приложение для блога с использованием Ruby on Rails, которое включает возможность голосовать за сообщения. Пользователь может щелкнуть голосование, и в таблице голосования создается запись. Сейчас я пытаюсь ограничить участие одного и того же человека в голосовании за пост несколько раз.

class Post
 has_many :votes
end


class Vote
 belongs_to :post
end

Когда создается запись голосования, я использую VotesController для передачи: post_id и использую скрытое поле в представлении для передачи ip_address (оба в таблицу голосования). Мне интересно, есть ли способ добавить проверку в Модель голосования, которая ищет, чтобы узнать, есть ли у post_id ip_address, который соответствует человеку, запрашивающему голосование.

Я попытался просто использовать validates_uniqueness_of: ip_address, но это ограничивает пользователя от голосования по любому посту. Я просто хочу запретить пользователям голосовать за определенный пост, за который они уже проголосовали.

Есть ли способ сделать это с помощью проверки?

1 Ответ

5 голосов
/ 17 апреля 2010

попробуйте это:

class Vote
  belongs_to :post
  validates_uniqueness_of :ip_address, :scope => [:post_id]
end

Это подтвердит уникальность в отношении поста. Пользователь не сможет дважды проголосовать за одно и то же сообщение.

В других новостях - вы можете получить удаленный IP-адрес от request.remote_ip. Это оболочка для прокси IP-адресов, поэтому вам не придется беспокоиться о HTTP_X_FORWARDED_FOR и подобных заголовках.

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