「web two zero」の条件では、格付け、プラス、スター、カルマ、その他の自己肯定システムの問題は非常に重要です。 このトピックに正しくアプローチすると、格付けは非常にクールで必要なものになります。 現在、多くの人々は、評価がプラス/マイナスの平凡なねじれであるだけでなく、ユーザーアクティビティ、著者の権限、信頼性、および目に見えないすべてのものであることを理解しています。 このトピックに関する良い
記事は、
アルファによって書かれました。
しかし、Railsコミュニティが持っている標準ツールのみについて説明したいと思います。 プラグインについてです。 10分間グーグルで検索すると、2つしか見つかりませんでした。 私に適したものはありません=)。
いずれにせよ、ここにこれらのプラグインの簡単な概要があります(これらはレビューからの翻訳された抜粋です-これらのプラグインを使用したことはなく、計画もしていません)。 コメントでプラグインクリエーターの経験と他の成果へのリンクを外してください。
Acts_as_rated
関連リンク:
devblog.famundo.com/articles/2007/02/04/a-new-rails-plugin-acts_as_ratedwww.rubynaut.net/articles/2007/03/18/rails_ajax_rating_system_part_1rubyforge.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-railswww.naffis.com/2006/8/31/rails-ajax-star-rating-systemrubyforge.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人の代表者は非常に限られており、人に良い/悪いと言う機会を与えるというタスクにのみ対処しています。 もちろんこれはすでに何かですが、明らかに十分ではありません。 したがって、結論はあなた自身のものを書くことです。