竖起大拇指宝石路由错误

时间:2013-08-25 12:05:59

标签: ruby-on-rails ruby ruby-on-rails-4 vote

我要求澄清使用竖起大拇指宝石和导轨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

任何想法可能是导致此错误的原因?

4 个答案:

答案 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) %>