You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 → method
  • desabled → 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:05:33