ruby-on-railsvotingsocial-media-like

acts_as_votable thumbs up/down buttons


I installed the acts_as_votable gem, it works in the console like it should (like it says in the documentation). So my question is how to set up a form for upvote and downvote buttons? or can they simply be links?

here is the documentation: github.com/ryanto/acts_as_votable/blob/master/README.markdown

I have a user and a picture model; the user is supposed to be able to like the picture. code from the picture view, where the buttons should be:

<% for picture in @pictures %> 
<p> 
<%= image_tag picture.image_url(:thumb).to_s %> 
</p> 
<%= picture.created_at.strftime("%a, %d %b. %Y") %>, by 
<%= link_to picture.user.name, picture.user %> 
<h2> <%= link_to picture.name, picture %></h2> 

[buttons here] 

<%= picture.votes.size %> <% end %>

Solution

  • One way to do this is to add your own controller actions for up- and downvotes. I'm assuming you have a current_user method available in your controller.

    # pictures_controller.rb
    def upvote
      @picture = Picture.find(params[:id])
      @picture.liked_by current_user
      redirect_to @picture
    end
    
    def downvote
      @picture = Picture.find(params[:id])
      @picture.downvote_from current_user
      redirect_to @picture
    end
    
    # config/routes.rb
    
    resources :pictures do
      member do
        put "like", to: "pictures#upvote"
        put "dislike", to: "pictures#downvote"
      end
    end
    
    # some view
    
    <%= link_to "Upvote", like_picture_path(@picture), method: :put %>
    <%= link_to "Downvote", dislike_picture_path(@picture), method: :put %>