Clarification on how to use "thumbs_up" voting gem with Rails 3

Solution 1:

Hopefully I can help you out a bit.

The generators should have created a Vote model for you. This is the model that holds all the votes, but that you interact with indirectly through the methods you've described above.

So, for you:

class User < ActiveRecord::Base
  acts_as_voter
end

class Post < ActiveRecord::Base
  acts_as_voteable
end

That will get you set up with the thumbs_up methods in each of the models.

Then for example, if you have a controller action in PostsController that is linked to from an "up arrow" on your website, you can create a vote for that user for that post.

A view like this:

<%= link_to('vote for this post!', vote_up_post_path(@post), :method => :post) %>

and a routes.rb like this:

resources :posts do
  member do
    post :vote_up
  end
end

And finally, in the controller:

class PostsController < ApplicationController
  def vote_up
    begin
      current_user.vote_for(@post = Post.find(params[:id]))
      render :nothing => true, :status => 200
    rescue ActiveRecord::RecordInvalid
      render :nothing => true, :status => 404
    end
  end
end

Solution 2:

Routing Error

No route matches {:action=>"vote_up", :controller=>"microposts", :id=>nil}

this is the link I am using and assume this is where the routing isn't being specified correctly. I ran rake routes and there is a route called vote_up_micropost. Is there anything else I should look into. Thank you

here is the link I added

<%= link_to('vote for this post!',
    vote_up_micropost_path(@microposts),
    :method => :post) %>