レール 評価システム。 プラグイン

「web two zero」の条件では、格付け、プラス、スター、カルマ、その他の自己肯定システムの問題は非常に重要です。 このトピックに正しくアプローチすると、格付けは非常にクールで必要なものになります。 現在、多くの人々は、評価がプラス/マイナスの平凡なねじれであるだけでなく、ユーザーアクティビティ、著者の権限、信頼性、および目に見えないすべてのものであることを理解しています。 このトピックに関する良い記事は、 アルファによって書かれました。



しかし、Railsコミュニティが持っている標準ツールのみについて説明したいと思います。 プラグインについてです。 10分間グーグルで検索すると、2つしか見つかりませんでした。 私に適したものはありません=)。



いずれにせよ、ここにこれらのプラグインの簡単な概要があります(これらはレビューからの翻訳された抜粋です-これらのプラグインを使用したことはなく、計画もしていません)。 コメントでプラグインクリエーターの経験と他の成果へのリンクを外してください。







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



プラグインの主な宣言された利点は、多くのカスタムオプションとキャッシュです。これにより、データベースへの呼び出しの回数が減ります。



設置



スクリプト/プラグインインストール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



設置



スクリプト/プラグインのインストールsvn://rubyforge.org/var/svn/rateableplugin/trunk

移行

スクリプト/移行の生成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-オブジェクトの評価を返します

* find_all_by_rating-条件を満たすすべてのオブジェクトを返します

* find_by_rating-条件を満たす最初のオブジェクトを返します



おわりに



これらの2人の代表者は非常に限られており、人に良い/悪いと言う機会を与えるというタスクにのみ対処しています。 もちろんこれはすでに何かですが、明らかに十分ではありません。 したがって、結論はあなた自身のものを書くことです。



All Articles