我正在尝试在Rails 3应用程序上实现thumbs_up投票宝石,但有关实际实施的说明不清楚。在需要gem [ gem'thumb_up']之后以及创建并运行相应的迁移后[ rails generate thumbs_up&& rake db:migrate ] README解释了以下内容:
要对模型投票,您可以执行以下操作:
*速记语法
voter.vote_for(可投票)#添加+1 投票
voter.vote_against(可投票)# 添加-1投票选民投票(投票, 投票)#添加+1或-1投票: vote => true(+1),vote =>假(-1)
voter.vote_exclusively_for(可投票)# 删除之前的任何投票 特别的选民和投票 voter.vote_exclusively_against(可投票)# 删除之前的任何投票 特别的选民和反对票。*
我一直认为在README示例中使用'voter'和'voteable'是应用程序中对象的替身,但这种用法对我来说仍然模糊不清。
我的视图,控制器和routes.rb文件应该是什么样子的文字示例将是一个非常有用的帮助。我花了好几天试图解决这个问题!
在我的应用中,我有用户在帖子上投票 - 其中有两种类型 - 事件和链接。使用<%= render:partial =>调用帖子@posts%> ,每个帖子都使用“ _event.html.erb ”或“ _link.html.erb ”视图 - 具体取决于是否是一个事件或链接。
答案 0 :(得分:24)
希望我能帮助你一点。
生成器应该为您创建一个投票模型。这是持有所有投票的模型,但您通过上述方法间接进行交互。
所以,对你来说:
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) %>
和这样的routes.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 :(得分:1)
路由错误
没有路线匹配{:action =&gt;“vote_up”,:controller =&gt;“microposts”, :ID =&GT;零}
这是我正在使用的链接,并假设这是未正确指定路由的地方。我跑了rake路线,有一条名为vote_up_micropost的路线。还有什么我应该研究的。谢谢
这是我添加的链接
<%= link_to('vote for this post!',
vote_up_micropost_path(@microposts),
:method => :post) %>
答案 2 :(得分:0)
这只是布拉迪回答的延续。
Brady在他的观点中有以下代码
<%= link_to('vote for this post!', vote_up_post_path(@post), :method => :post) %>
他的意思是......因为默认情况下link_to使用:method => 'get'
&amp;他想用post&amp;更新记录。没有得到他正在使用:method => 'post'
你可以使用&lt;%= button_to('投票支持这篇文章!',vote_up_post_path(@ post)%&gt;,因为按钮默认使用:method => :post
所以路线应该是
resources :posts do
member do
post :vote_up
end
end
在会员内post :vote_up
,method => :post
&amp;不是帖子控制器
但是如果您决定使用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
希望这有帮助!