“Like”, “Dislike” plugin for rails

后端 未结 5 1037
不思量自难忘°
不思量自难忘° 2020-12-14 03:27

Is there any \"like\" , \"dislike\" plugin for rails...

I went through rating plugins... but all of them were 5 star rating plugins...

相关标签:
5条回答
  • 2020-12-14 03:58

    I know an answer has already been accepted but I've just found a gem called act_as_votable that might fit your needs:

    Acts As Votable is a Ruby Gem specifically written for Rails/ActiveRecord models. The main goals of this gem are:

    • Allow any model to be voted on, like/dislike, upvote/downvote, etc.
    • Allow any model to vote. In other words, votes do not have to come from a user, they can come from any model (such as a Group or Team).
    • Provide an easy to write/read syntax.
    0 讨论(0)
  • 2020-12-14 03:59

    Try Recommendable:

    https://github.com/davidcelis/recommendable

    0 讨论(0)
  • 2020-12-14 04:04

    I see nothing wrong with the question.

    Up down voting is still rating. Just using only two stars. :) I seem to remember acts_as_rateable allowing number of star definition.

    0 讨论(0)
  • 2020-12-14 04:06

    I recommend creating the like and dislike option by taking on the classic vote model functionality.

    So you have Vote as a join table between the User and the Votable Item .

    A Vote value can work as Vote.value + 1 = Like, Vote.value -1 = Dislike, Vote.value = Neutral/Didn't vote.

    Your controller for your votable item can look like this :

    def like
      get_vote
      @vote.value += 1 unless @vote.value == 1
      @vote.save
      respond_to do |format|
        format.html
        format.js 
      end
    end
    
    def dislike
      get_vote
      @vote.value -= 1 unless @vote.value == -1
      @vote.save
      respond_to do |format|
        format.html
        format.js 
      end
    end
    
    private
    
    def get_vote
      current_item = @item.detect{|r| r.id == params[:id].to_i}
      @vote = current_item.votes.find_by_user_id(current_user.id)
      unless @vote
        @vote = Vote.create(:user_id => current_user.id, :value => 0)
        current_item.votes << @vote
      end
    end
    

    And for everyone's info, this question didn't deserve to be voted down. Its completely valid.

    0 讨论(0)
  • 2020-12-14 04:08

    Why don't just create a new boolean field named like? and then update it as false for dislike and true for like. I doubt you find a plugin/gem for this functionality.

    0 讨论(0)
提交回复
热议问题