Как стать автором
Обновить

Rails. Система рейтингов. Плагины

Время на прочтение 3 мин
Количество просмотров 2.8K
В условиях «веб два ноль» очень актуален вопрос рейтингов, плюсиков, звездочек, кармы и прочих систем самоутверждния. Если правильно подойти к этой теме — то рейтинги — это очень крутая, необходимая вещь. Сейчас уже многие понимают, что рейтинг это не только банальное накручивание плюсиков/минусиков, но так же и скрытая для глаз пользовательская активность, авторитетность автора и все такое. Хорошую статью на этут тему написал alfa.

Но я бы хотел обсудить только стандартные средства, которые имеет rails сообщество. Речь о плагинах. Погуглив 10 минут я нашел лишь два. Ни один меня не устроил =).

В любом случае вот краткий обзор этих плагинов (это скорее переведенные выдержки из обзоров — я этими плагинами не пользовался и не планирую). Пожалуйста, скидывайте ваш опыт и ссылки на прочие достижение плагиносоздателей в комментарии.



Acts_as_rated


Ссылки по теме:
devblog.famundo.com/articles/2007/02/04/a-new-rails-plugin-acts_as_rated
www.rubynaut.net/articles/2007/03/18/rails_ajax_rating_system_part_1
rubyforge.org/projects/acts-as-rated

Основное заявленное достоинство плагина — множество настраиваемых опций и кеширование, что сокращает количество обращений к базе.

Установка


script/plugin install svn://rubyforge.org/var/svn/acts-as-rated/trunk/acts_as_rated

Пример использования


class Book < ActiveRecord::Base
acts_as_rated
end

u = User.find_by_name "guy"
b = Book.find "Catch 22"
b.rate 5, u
u = User.find_by_name "john"
b.rate 3, u

b.rating_average # => 4
Book.find_by_rating 2..3 # => [<Book:"Catch 22">]

b.find_rated_by User.find_by_name("guy") # => [<Book:"Catch 22">]


Плагин идет сразу с пачкой миграций, что упращает его добавление в любой проект. Так же включены тесты.

Основные функции


* Встраивание в любую модель
* Данные рейтинга можно хранить как во внешней таблице, так и непосредственно в бд модели
* Ограничение пределов оценки
* Подсчет средней и общей оценки и количества голосов
* Поиск объектов по рейтингу или границам рейтинга, а также по рейтингующему

Acts_as_rateable


Ссылки по теме:
satishchauhan.wordpress.com/2007/08/24/star-rating-in-ruby-on-rails
www.naffis.com/2006/8/31/rails-ajax-star-rating-system
rubyforge.org/projects/rateableplugin

Установка


script/plugin install svn://rubyforge.org/var/svn/rateableplugin/trunk
миграция
script/generate migration add_ratings

def self.up
create_table :ratings do |t|
t.column :rating, :integer # You can add a default value here if you wish
t.column :rateable_id :integer, :null => false
t.column :rateable_type, :string, :null => false
end
end

def self.down
drop_table :ratings
end


Пример использования



class SillyWalk < ActiveRecord::Base
# attributes: name, inventor
acts_as_rateable
end

SillyWalk.new(:name => "Not Very Silly", :inventor => "Mr. Pudey").save
SillyWalk.new(:name => "A Bit Silly", :inventor => "Mrs. Two-Lumps", :rating => 3).save
SillyWalk.new(:name => "Quite Silly", :inventor => "Mr. Teabag", :rating => 5).save
# To update the rating after creation of the initial record...
SillyWalk.find_by_name("Not Very Silly").rate(1)
# You could also do this
SillyWalk.find_by_name("Not Very Silly").rating = 1
# Retreive the rating
SillyWalk.find_by_name("Not Very Silly").rating # => 1

# Find silly walks with a rating of at least 3
SillyWalk.find_all_by_rating(3..-1) # => ["A Bit Silly", "Quite Silly"]
# Find silly walks with a rating of 5 (only)
SillyWalk.find_all_by_rating(5) # => ["Quite Silly"]
# Find silly walks with a rating of 1 or 5
SillyWalk.find_all_by_rating([1,5]) # => ["Not Very Silly", "Quite Silly"]
# Find silly walks with a rating between 3 and 5, inclusive
SillyWalk.find_all_by_rating(3..5) # => ["A Bit Silly", "Quite Silly"]
# You can also mix specific ratings and ranges...
SillyWalk.find_all_by_rating([1,3..5]) # => ["Not Very Silly", "A Bit Silly", "Quite Silly"]


Основные функции


* Встраиваится в любую модель
методы
* rate(int) — оценивает объект
* rating= — то же самое
* rating — возвращает рейтинг объекта
* find_all_by_rating — возвращает все объекты, выполняющие условие
* find_by_rating — возвращает первый объект, выполняющий условие

Вывод


Данные два представителя весьма ограничены и справляются лишь с задачей дать человеку возможность сказать хорошо/плохо. Это конечно уже что-то, но явно не достаточно. Поэтому вывод — писать что-то свое.
Теги:
Хабы:
+16
Комментарии 20
Комментарии Комментарии 20

Публикации

Истории

Работа

Ruby on Rails
17 вакансий
Программист Ruby
15 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн