Задать вопрос

Система рейтинга на Rails?

Всем привет. Стоит задача сделать очень простую систему рейтинга на RoR. Голосовать за «статьи» могут абсолютно все пользователи, данные о том, проголосовал ли человек должны храниться в coockie. Подскажите, как лучше организовать модель рейтинга? И нужна ли она вообще в такой простой задаче?
  • Вопрос задан
  • 4833 просмотра
Подписаться 7 Оценить 3 комментария
Решения вопроса 1
FanKiLL
@FanKiLL
class CreatePostVotes < ActiveRecord::Migration
  def change
    create_table :post_votes do |t|
    	t.string :user_ip
    	t.integer :post_id
    	t.integer :value
        t.timestamps
    end

    add_index :post_votes, [:user_ip, :post_id], :unique => true
    add_index :post_votes, :user_ip
    add_index :post_votes, :post_id
  end
end


#validations
validates :post_id, uniqueness: {scope: :user_ip}
validates :value, inclusion: { in: [1, -1], message: "%{value} is not a valid vote" }


Как то так. Хотя выше уже написали, это просто для наглядности.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
MpaK999
@MpaK999
Буду!
Тут их много, возьмите какая понравится www.ruby-toolbox.com/categories/rails_ratings
Ответ написан
anathem
@anathem
Никаких куков не нужно.

1) делаете таблицу а-ля post_votes с полями user_id: и post_id (если нужно +, — или там рейтинг 1..5 добавляете еще и поле со значением)

Вариант А.
2) при голосовании проверяете в модели уникальность юзера в скоупе поста (то есть, если уже запись юзер-пост существует, рейтинг не учитываем, т.к. это повторное голосование)
3) рейтинг статьи = кол-во голосов за статью
Вариант Б.
2) сама статья имеет поле с рейтингом и при голосовании изменяем её + дублируем в вышеупомянутой таблице факт голосования юзером, что бы потом при повторном нажатии можно было провалидировать, не голосовал ли пользователь.

ps. Я бы по второму варианту сделал )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы