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

Rails中如何正确定义控制器名称解决路由不支持报错

Rails路由配置错误排查及修复方案

错误原因

  • 控制器与路由引用不匹配:你定义的控制器是Panel命名空间下的CcApisController(Apis为复数),路由中错误写为单数的CcApiController,不符合Rails命名约定。
  • 路由语法错误:resources后需接小写蛇形复数的资源名,不能直接写控制器类名,同时命名空间下的控制器需要套namespace块配置路由,你之前写的resources: CcApiController属于语法错误,符号位置和参数格式都不符合要求。
  • 路由重复配置:你同时在routes.rb和panel_routes.rb中配置同一份资源,会引发路由冲突。
  • 自定义方法未做路由映射:你需要调用的make_request方法没有在路由中做对应配置,无法被外部访问。

修复步骤

  1. 修正路由配置
    删除routes.rb中原有的错误配置,以及panel_routes.rb中错误的draw_api_routes方法内容,按如下格式配置:
# config/routes.rb
Rails.application.routes.draw do
  # 匹配Panel命名空间
  namespace :panel do
    # 对应CcApisController,只保留index接口
    resources :cc_apis, only: [:index] do
      collection do
        # 给make_request方法配置POST路由,对外暴露路径为/panel/cc_apis/translate
        post :translate, action: :make_request
      end
    end
  end
end

如果需要保留panel_routes.rb的抽离配置,也按上述语法规则修改即可。

  1. 完善控制器逻辑
    将make_request方法移入CcApisController中,同时适配前端请求参数,增加JSON返回格式:
# app/controllers/panel/cc_apis_controller.rb
module Panel
  class CcApisController < CcenterBaseController
    # 若有全局登录校验,可加skip_before_action跳过校验方便前端调用,按需开启
    # skip_before_action :verify_authenticity_token

    def index
      run Ccenter::Adapters::Zendesk::TranslationApi.call(2116449)
    end

    def make_request
      # 接收前端传过来的待翻译文本参数
      @final_ticket = params[:text]
      response = Faraday.post(
        'https://api.deepl.com/v2/translate',
        auth_key: '替换为你的实际Deepl密钥',
        text: @final_ticket,
        target_lang: 'DE',
        source_lang: 'EN'
      )
      if response.status == 200
        body = response.body
        message_element = body.split('&quot;')[-2]
        # 返回JSON格式给前端
        render json: { translated_text: message_element }
      else
        raise InvalidResponseError unless response.success?
      end
    end
  end
end
  1. 验证配置
    执行命令bin/rails routes | grep cc_apis,即可看到生成的合法路由,翻译接口的调用路径为/panel/cc_apis/translate,请求方法为POST,前端直接用Fetch调用即可。
    若存在跨域问题,在config/initializers/cors.rb中配置允许的前端域名即可。

内容的提问来源于stack exchange,提问作者user16741832

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:45:01