Rails报错No route matches [POST] "/article/1/like"求助
问题分析与修复步骤
你遇到的No route matches [POST] "/article/1/like"错误,是由多个拼写错误、路由配置不匹配以及代码逻辑问题共同导致的,以下是逐一修复方案:
1. 修正路由中的控制器名称错误
在routes.rb中,你将控制器写成了单数article#like,但Rails控制器命名规范是复数,正确的控制器应该是articles#like:
Rails.application.routes.draw do get 'static_pages/landing_page' get 'static_pages/dashboard' devise_for :users resources :users resources :articles do resources :comments end # 修正控制器名为复数,同时因为点赞是创建新记录,用POST更符合RESTful规范 post '/article/:id/like', to: 'articles#like', as: 'like' root "articles#index" end
2. 修复视图中的拼写错误
你的ERB代码里有两处拼写错误,导致请求方法未正确设置:
methode→methoddesabled→disabled
修正后的视图代码:
<% if article.liked?(current_user) %> <%= button_to "like", like_path(article), disabled: true %> <% else %> <%= button_to "like", like_path(article) %> <% end %>
(注:button_to默认发送POST请求,和我们修改后的路由匹配,因此可以省略method: :post)
3. 修复控制器中的模型调用与跳转路径错误
控制器里存在两处问题:
- 调用模型类时用了实例
article,应该用模型类Article redirect_to articles_path(@article)会生成错误路径,正确的单条文章路径是article_path(@article)(或直接简写为@article)
修正后的控制器代码:
def like @article = Article.find(params[:id]) Like.create(user_id: current_user.id, article_id: @article.id) redirect_to @article end
完成以上修改后,重启Rails服务器,点赞功能即可正常工作。
内容的提问来源于stack exchange,提问作者Ican Doit
相关产品推荐
相关产品推荐

