2011-02-05 9 views
11

Estoy intentando implementar la gema de votación thumbs_up en una aplicación de Rails 3, sin embargo, las instrucciones no están claras en la implementación real. Después de que requiere la gema [joya 'thumbs_up'] y después de la creación y ejecución de la migración adecuada [rieles generan thumbs_up db & & rastrillo: migrar] README explica lo siguiente:Aclaración sobre cómo usar la gema de votación "thumbs_up" con Rails 3

de emitir un voto para un modelo que puede hacer lo siguiente:
* taquigrafía sintaxis
voter.vote_for (voteable) # agrega un 1 voto
voter.vote_against (voteable) # Añade un -1 voto
voter.vote (voteable, voto) # agrega ya sea un 1 o -1 votación: voto => true (1), voto => false (-1)

voter.vote_exclusively_for (voteable) # Elimina los votos anteriores por los que votante particular, y vota por.
voter.vote_exclusively_against (voteable) # Elimina los votos anteriores de que votante en particular, y los votos en contra. *

he estado asumiendo que el uso de 'votantes' y 'voteable' en el README Por ejemplo, son suplentes para objetos en la aplicación, pero el uso sigue siendo nebuloso para mí.

Un ejemplo literal de cómo se verían mi vista, el controlador y el archivo routes.rb sería una ayuda TREMENDOSA. ¡He pasado días tratando de resolver esto!

En mi aplicación, lo tenemos usuarios que votar sobre mensajes - de los cuales hay dos tipos - Eventos y Enlaces . Mensajes se denominan utilizando <% = render: parcial => @posts%> y cada poste individuo utiliza como su vista "_event.html.erb" o "_link.html.erb" - dependiendo de si es un evento o un enlace.

Respuesta

24

Espero poder ayudarte un poco.

Los generadores deberían haber creado un modelo de Voto para usted. Este es el modelo que contiene todos los votos, pero que usted interactúa indirectamente a través de los métodos que describió anteriormente.

Por lo tanto, para usted:

class User < ActiveRecord::Base 
    acts_as_voter 
end 

class Post < ActiveRecord::Base 
    acts_as_voteable 
end 

que hará que se configura con los métodos thumbs_up en cada uno de los modelos.

Luego, por ejemplo, si tiene una acción de controlador en PostsController que está vinculada desde una "flecha hacia arriba" en su sitio web, puede crear un voto para ese usuario para esa publicación.

una vista como esta:

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

y unas rutas.rb así:

resources :posts do 
    member do 
    post :vote_up 
    end 
end 

Y, por último, en el controlador:

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 
+1

Hey brady8, puede haber más de un modelo que 'acts_as_voter'? Por ejemplo, supongamos que tengo un modelo 'Usuario' y un modelo' cliente'. ¿Pueden ambos actuar como votante y funciona bien? – marcamillion

+4

Sí, ciertamente. – bouchard

+0

@ brady8 Recibo el mismo error de NoMethod que se menciona en la respuesta a continuación. ¿Podrían dar más detalles sobre eso? –

0

Esta es sólo una continuación de la respuesta de Brady.

Brady tenía el siguiente código en su opinión

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

lo que quiere decir es .. ya link_to por defecto usa :method => 'get' & que quería actualizar el registro usando posterior & no conseguir así que él está utilizando :method => 'post'

U puede utilizar <% = button_to ('voto para este post!', vote_up_post_path (@post)%>, porque botón de forma predeterminada utiliza :method => :post

lo que las rutas deben ser

resources :posts do 
    member do 
    post :vote_up 
    end 
end 

aquí en post :vote_up el interior del órgano, es el method => :post & no el controlador de post

pero si usted está decidido a utilizar link_to sin :method => :post algo como esto

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

luego su ruta debe ser

resources :posts do 
    member do 
     get :vote_up 
    end 
end 

Espero que esto ayude!

1

enrutamiento de error

No hay coincidencias ruta {: action => "vote_up",: controller => "microposts", : id => nil}

este es el enlace que he estoy usando y supongo que es aquí donde el enrutamiento no se especifica correctamente. Ejecuté rutas de rake y hay una ruta llamada vote_up_micropost. ¿Hay algo más que debería investigar? Gracias

aquí está el enlace añadí

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

Es probable que su variable @microposts sea nula ... por lo que intenta enviarlo a: id => nil. – bouchard

+0

¿Dónde y cómo se establece la variable @microposts? – gbutters

Cuestiones relacionadas