2011-09-30 48 views
0

好的,我有一个简单的问题。我是RoR的新手,我为一件物品创建了脚手架。然后我想添加一个链接,当按下时,增加一个计数器。我遇到的麻烦是路由。我在销毁/删除链接和方法之后对此功能进行了建模。这里是我的代码:Rails3 - 需要一种方法来增加一个计数器

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 

当我尝试点击链接,我得到一个路由错误:

Routing Error 

    No route matches [POST] "/posts/25" 

有没有我失踪的一步?我必须添加一些路由选项才能使其工作?

回答

3

好,挂在这里与我,有需要一些修正:

:method PARAM在link_to功能是不是指控制器方法,它指的是HTTP方法。因此,可接受的值是“:后”,“:删除”等

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

在这种情况下,我们可能需要设置:method:post的增量环节,我们将需要匹配与我们现在将创建的路线。

要访问您所创建的投票行动,我们需要将它添加到路由文件。你可能有这样的事情:

resources :posts 

我们需要添加一个动作(票),这将适用于岗位资源中的一员,所以我们改变这样的:

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

现在我们有正确的路线,我们可以使用在link_to辅助路线的辅助方法(见路线的完整列表,请在命令行中运行rake routes)。所以在你的link_tovote_post_path(post)替换post。如果我们包括我们对:method早期变化,我们得到:

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

希望这有助于在一些空白填补为您服务!

+0

谢谢!做到了! – user972276

0

我打算假设您没有将职位添加为config/routes.rb文件的资源。尝试添加以下行:

map.resources :posts 

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

相关问题