Clarification on how to use “thumbs_up” voting gem with Rails 3

后端 未结 3 703
悲&欢浪女
悲&欢浪女 2020-11-30 03:27

I am attempting to implement the thumbs_up voting gem on a Rails 3 app, however the instructions are unclear on the actual implementation. After requiring the gem [g

相关标签:
3条回答
  • 2020-11-30 03:57

    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
    
    0 讨论(0)
  • 2020-11-30 04:13

    This is just a continuation of Brady's answer.

    Brady had the following code in his view

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

    what he means is.. since link_to by default uses :method => 'get' & he wanted to update the record using post & not get so he is using :method => 'post'

    U can use <%= button_to('vote for this post!', vote_up_post_path(@post) %>, because button by default uses :method => :post

    so the routes should be

    resources :posts do
      member do
        post :vote_up
      end
    end
    

    here in post :vote_up inside the member, its the method => :post & not the post controller

    but if you are determined to use link_to without :method => :post something like this

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

    then your routing should be

    resources :posts do
       member do
          get :vote_up
       end
    end
    

    Hope this helps!

    0 讨论(0)
  • 2020-11-30 04:21

    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) %>
    
    0 讨论(0)
提交回复
热议问题