Rails3 - 需要路由到增加计数器的方法

时间:2011-09-30 02:29:52

标签: ruby ruby-on-rails-3 routing

好的,我有一个简单的问题。我是RoR的新手,我为一件物品创建了一个脚手架。然后我想添加一个链接,当按下该链接时,会增加一个计数器。我遇到的麻烦是路由。我在destroy / delete链接和方法之后建模了这个功能。这是我的代码:

index.html.erb:

  ...
  <td><%= link_to 'Destroy', post, method: :delete %></td>
  <td><%= link_to 'increment', post, method: :increment%></td>
  ...

post_controller.rb:

  def vote
    @post = Post.find(params[:id])
    @post.counts = @post.counts + 1
    @post.save

    respond_to do |format|
      format.html { redirect_to post_url }
      format.json { head :ok }
    end
  end

当我尝试点击链接时,出现路由错误:

  

路由错误

     

没有路线匹配[POST]“/ posts / 25”

我缺少一个步骤吗?我是否必须添加一些路由功能才能使其正常工作?

2 个答案:

答案 0 :(得分:3)

好的,和我一起住在这里,需要一些修复:

:method函数中的link_to参数不是指控制器方法,而是指HTTP方法。所以可以接受的值是':post',':delete'等。

更多信息:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

在这种情况下,我们可能希望为增量链接设置:method:post,我们需要将其与我们现在创建的路线匹配。

要访问您创建的投票操作,我们需要将其添加到路线文件中。你可能有这样的事情:

 resources :posts

我们需要添加一个动作(投票),该动作将适用于posts资源的成员,因此我们将其更改为:

resources :posts do
  member do
    post 'vote'
  end
end

现在我们有了正确的路由,我们可以在link_to帮助器中使用路由助手方法(查看命令行中运行rake routes的路由的完整列表)。因此,link_topost替换为vote_post_path(post)。如果我们包含我们之前对:method获得的更改:

<%= link_to 'increment', vote_post_path(post), method: :post %>

希望这有助于填补一些空白!

答案 1 :(得分:0)

我将假设您尚未将帖子作为资源添加到config / routes.rb文件中。尝试添加以下行:

map.resources :posts

您可能必须在进行更改后重新启动服务器。