Acts_As_Votable Gem の使用方法?

Acts_As_Votable これは、Rails/ActiveRecord モデル用に特別に書かれた Ruby gem であり、この gem を使用すると、任意のモデルに賛成/反対、好き/嫌いなどの投票を行うことができます。この gem を使用すると、任意のスコープで任意のモデルに投票できるようになり、任意のモデルに投票できます。投票はユーザーから取得する必要はなく、任意のモデル (グループやチームなど) から取得でき、書き込み/読み取りが簡単な構文を提供します。 ジェムのインストール
gem「acts_as_votable」
Gemfile に上記の行を追加し、バンドル インストールを実行します。 サポートされている Ruby と Rails のバージョン
Ruby 1.8.7、1.9.2、1.9.3、2.0.0、2.1.0 Rails 3.0、3.1、3.2、4.0、4.1+
この Gem は投票テーブルを使用してすべての投票情報を保存します。投票移行を生成するには、以下のコマンドを実行します
レール生成 act_as_votable:移行 rake db:移行
モデルを評価するには、モデルで「acts_as_votable」を使用するだけです 例:
class Article < ActiveRecord::Base act_as_votable end @article = Article.new(:name => '私の新しい記事') @article.save @article.liked_by @user @article.votes_for.size # => 1
以下にいくつかの投票例を示します。これらの呼び出しはすべて有効であり、受け入れられます。
@article.liked_by @user1 @article.downvote_from @user2 @article.vote_by :voter => @user3 @article.vote_by :voter => @user4, :vote => 'like' @article.vote_by :voter => @user5 , :vote => 「嫌い」
デフォルトでは、すべての投票が肯定的であるため、@user3 は @article に「良い」票を投じています。 @user1、@user3、@user4 はすべて @article に賛成票を投じました。 @user2 と @user5 は、@article に反対票を投じました。肯定/否定、賛成/反対、好き/嫌いなど、投稿に賛成または反対の投票を行うにはあらゆる単語が機能します。ブール値フラグ true と false も適用できます。 スコープを使用した例: この gem を使用すると、投票に範囲を追加できます
# の肯定的/いいね! 投票 @article.liked_by @user1, :vote_scope => 'rank' @article.vote_by :voter => @user3, :vote_scope => 'rank' @article.vote_by :voter => @user5, :vote => 'like', :vote_scope => 'rank' # 否定/嫌い投票 @article.downvote_from @user2, :vote_scope => 'rank' @article.vote_by :voter => @user2, :vote => '嫌い' , :vote_scope => 'rank' # で集計してみましょう! @article.find_votes_for(:vote_scope => 'ランク').size # => 5 @article.get_likes(:vote_scope => 'ランク').size # => 3 @article.get_upvotes(:vote_scope => 'ランク' ).size # => 3 @article.get_dislikes(:vote_scope => 'rank').size # => 2 @article.get_downvotes(:vote_scope => 'rank').size # => 2 # 投票可能モデルは同じユーザーによる異なるスコープでの投票 @article.vote_by :voter => @user1, :vote_scope => 'week' @article.vote_by :voter => @user1, :vote_scope => 'month' @article.votes_for.size # => 2 @article.find_votes_for(:vote_scope => '週').size # => 1 @article.find_votes_for(:vote_scope => '月').size # => 1
投票に重みを追加すると、投票に重みを追加できます。デフォルト値は 1 です。
# の肯定的/いいね! 投票 @article.liked_by @user1, :vote_weight => 1 @article.vote_by :voter => @user3, :vote_weight => 2 @article.vote_by :voter => @user5, :vote => 'like ', :vote_scope => 'rank', :vote_weight => 3 # 否定/嫌い投票 @article.downvote_from @user2, :vote_scope => 'rank', :vote_weight => 1 @article.vote_by :voter => @user2 , :vote => '嫌い', :vote_scope => 'rank', :vote_weight => 3 # で集計してみよう! @article.find_votes_for(:vote_scope => 'rank').sum(:vote_weight) # => 6 @article.get_likes(:vote_scope => 'rank').sum(:vote_weight) # => 6 @article.get_upvotes (:vote_scope => 'rank').sum(:vote_weight) # => 6 @article.get_dislikes(:vote_scope => 'rank').sum(:vote_weight) # => 4 @article.get_downvotes(:vote_scope = > 'ランク').sum(:vote_weight) # => 4
投票者は、何らかの予備機能を提供するために、投票者として機能することができます。 例えば
class User < ActiveRecord::Base act_as_voter end @user.likes @article @article.votes.size # => 1 @article.likes.size # => 1 @article.dislikes.size # => 0
投票者がモデルに投票したかどうかを確認するには、voted_for? を使用できます。 voted_as_when_voted_for を使用して投票者がどのように投票したかを確認できます。また、投票者が賛成票を投じたか反対票を投じたかを確認することもできます。 voted_up_on メソッドのエイリアス?は投票済みですか? 、気に入りましたか?そして反対票を投じましたか? voted_down_for?、嫌いですか?また、ユーザーが投票したすべてのオブジェクトのリストを取得することもできます。これにより、Vote モデルのインスタンスではなく、実際のオブジェクトが返されます。すべてのオブジェクトは積極的にロードされます 登録投票: 投票者はモデルごとに 1 回のみ投票できます。この例では、@user がすでに @post に投票しているため、2 番目の投票はカウントされません。
@user.likes @post @user.likes @post @post.votes # => 1 @post.likes # => 1
投票がカウントされたか登録されているかを確認するには、vote_registered? を使用します。投票後にモデルに反映されます。例えば:
@product.liked_by @user @product.vote_registered? # => true @product.liked_by => @user @product.vote_registered? # => false、@user が既にこのように投票しているため @product.disliked_by @user @product.vote_registered? # => true、ユーザーが投票を変更したため
投票が登録または集計されたかどうかを確認するには、vote_registered? を使用します。投票後にモデルに反映されます。同じ投票者の重複エントリを許可するには、オプション Duplicate を使用します。また、これにより、複数の投票を処理しなかった他のいくつかの方法が制限されることにも注意してください。この場合、最後の投票が考慮されます。
@post.vote_by 投票者: @user, :duplicate => true
キャッシング: パフォーマンスを高速化するために、投票可能なモデルのテーブルにキャッシュ列を追加できます。これらの列は投票のたびに自動的に更新されます。 お問い合わせ 私たちについてもっと知りたい場合は、以下にコメントしてください。

最新のアップデートを購読する

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese