2011-02-05 43 views
11

我试图在Rails 3应用程序上实现thumbs_up投票宝石,但指令在实际实现上还不清楚。需要宝石后[宝石“thumbs_up”]和创建和运行适当的迁移后[轨产生thumbs_up & &耙分贝:迁移]自述说明如下:澄清如何使用“thumbs_up”投票宝石与Rails 3

要投上一票一个模型,你可以做到以下几点:
*语法速记
voter.vote_for(voteable)#添加一个+1 投票
voter.vote_against(voteable)# 添加一个-1票
voter.vote(voteable, 表决)#添加无论是+1或-1投票: 表决=>真(+1),表决=>假(-1)

voter.vote_exclusively_for(voteable)# 由 移除所有以前的票特定选民,并投票。
voter.vote_exclusively_against(voteable)# 移除由 特定选民以往任何选票,票反对。*

我一直在假设自述使用“选民”和“voteable”的示例是应用程序中对象的替身,但对我来说,这种用法仍然是模糊的。

我的视图,控制器和routes.rb文件应该看起来像一个字面示例将是一个TREMENDOUS帮助。我花了好几天的时间来解决这个问题!

在我的应用程序,我有用户对职位,投 - 其中有两种类型 - 活动链接。帖子使用<%=渲染调用:局部=> @posts%>和每个单独的交用作其视图“_event.html.erb”或“_link.html.erb” - 这取决于它是否是一个事件或一个链接。

回答

24

希望我能帮助你一点。

发电机应该为您创建了一个Vote模型。这是保存所有选票的模型,但是您可以通过上述方法间接进行交互。

所以,为您提供:

class User < ActiveRecord::Base 
    acts_as_voter 
end 

class Post < ActiveRecord::Base 
    acts_as_voteable 
end 

,将让你设置与每个模型的thumbs_up方法。

然后,例如,如果您在PostsController中的控制器操作通过网站上的“向上箭头”进行链接,则可以为该用户创建该帖子的投票。

像这样的视图:

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

和一个路由。RB是这样的:

resources :posts do 
    member do 
    post :vote_up 
    end 
end 

最后,在控制器:

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

嘿brady8,能有一个以上的模型`acts_as_voter`?例如,假设我有一个`User`模型和一个`client`模型。他们都可以充当选民,它可以正常工作吗? – marcamillion 2011-02-19 08:36:07

+4

是的,当然。 – bouchard 2011-02-28 07:53:13

0

这仅仅是一个布雷迪的回答延续。

布雷迪有下面的代码在他看来

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

他的意思是..因为的link_to默认使用:method => 'get' &他想使用后&得不到更新的记录,所以他是用:method => 'post'

U可以使用<%= button_to( '投票这个职位!',vote_up_post_path(@post)%>,因为默认情况下按钮使用:method => :post

这样的路径应该是

resources :posts do 
    member do 
    post :vote_up 
    end 
end 

在这里post :vote_up成员内部,其method => :post &不交控制器

,但如果你有决心使用link_to没有:method => :post像这样

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

那么你的路由应该是

resources :posts do 
    member do 
     get :vote_up 
    end 
end 

希望这有助于!

1

路由错误

没有路由匹配{:行动=> “vote_up”:控制器=> “微柱”, :ID =>零}

这是链接我我正在使用并假设这是路由未被正确指定的地方。我跑耙路线,有一条路线叫vote_up_micropost。还有什么我应该看看。谢谢

这里是链接我加

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