好的,我有一个简单的问题。我是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”
我缺少一个步骤吗?我是否必须添加一些路由功能才能使其正常工作?
答案 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_to
将post
替换为vote_post_path(post)
。如果我们包含我们之前对:method
获得的更改:
<%= link_to 'increment', vote_post_path(post), method: :post %>
希望这有助于填补一些空白!
答案 1 :(得分:0)
我将假设您尚未将帖子作为资源添加到config / routes.rb文件中。尝试添加以下行:
map.resources :posts
您可能必须在进行更改后重新启动服务器。