我要求澄清使用竖起大拇指宝石和导轨4.我目前有一个用户资源和一个帖子资源,并设置了如下竖起大拇指。
将gem添加到gemfile并使用bundler安装它。 生成需要迁移
用户模型
class User < ActiveRecord::Base
acts_as_voter
end
发布模型
class Post < ActiveRecord::Base
acts_as_voteable
end
发布控制器
def vote_up
@post = Post.find(params[:id])
current_user.vote_for(@post)
respond_to do |format|
format.js
end
end
查看
<%= link_to('vote for this post!', vote_up_post_path(@post) , :method => :post) %>
路线档案
resources :posts do
member do
post :vote_up
end
end
但是我不断收到此错误
No route matches [POST] "/posts/vote_up"
在运行rake路线后,我可以看到以下路线可供我使用:
vote_up_post POST /posts/:id/vote_up(.:format) posts#vote_up
任何想法可能是导致此错误的原因?
答案 0 :(得分:0)
你能否告诉我们你的观点。
显然,你正在打电话
/posts/vote_up
而不是
/posts/:id/vote_up
答案 1 :(得分:0)
“vote_up”就像一个RESTful动作,类似于“post / 1 / delete”,“post / 1 / edit”。因此,您需要在路由中添加此自定义RESTful操作。
首先改变这样的路线。
resources :posts do
member do
post 'vote_up'
end
end
然后,在您的视图中,要使用此路径,请将资源添加为arg
vote_up_post_path @post
参考:http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
答案 2 :(得分:0)
阅读本笔记的其他人应该意识到帖子不是他的控制器帖子的单数...但是帖子http动词
resources :contenders do
member do
post 'vote_up'
end
end
答案 3 :(得分:0)
不确定,但在您的观点中,而不是@post尝试将@ post.id提供给vote_up_post_path。
<%= link_to('vote for this post!', vote_up_post_path(@post.id) , :method => :post) %>