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

如何将控制器方法迁移至RESTful路由资源,避免单独定义GET路由?

解决方案:将自定义GET方法整合到RESTful资源路由

没问题!要把你的new_sms方法整合到resources :send_sms的RESTful路由里,只需要遵循Rails的约定调整几个地方,就能去掉单独的GET路由定义。下面是具体步骤:

1. 重命名控制器中的方法

RESTful资源路由里的new动作是专门用来展示创建资源的表单页面的,正好对应你new_sms的功能。所以先把控制器里的方法名改成标准的new:

修改前的SendSmsController:

class SendSmsController < ApplicationController
  def new_sms
    # 你的原有逻辑,比如初始化短信对象
    @send_sms = SendSms.new
  end

  # 其他已有的index、create方法...
end

修改后的SendSmsController:

class SendSmsController < ApplicationController
  def new
    # 保留原来的业务逻辑不变
    @send_sms = SendSms.new
  end

  # 其他已有的index、create方法...
end

2. 调整视图文件的命名

Rails的控制器动作会默认渲染同名的视图文件,所以把你的视图文件名从new_sms.slim改成new.slim:

  • 原路径:app/views/send_sms/new_sms.slim
  • 修改后路径:app/views/send_sms/new.slim

视图文件的内容完全不用改,逻辑保持原样即可。

3. 更新路由配置

现在可以删掉单独的get :new_sms路由,然后在resources :send_sms的only数组里加上new动作:

修改前的routes.rb:

resources :send_sms, only: %i[index create]
get :new_sms, to: 'send_sms#new_sms'

修改后的routes.rb:

resources :send_sms, only: %i[index new create]

验证效果

完成以上修改后,访问/send_sms/new就会触发SendSmsController#new动作,渲染对应的表单视图,完全符合RESTful规范,而且不用再维护单独的GET路由了。

内容的提问来源于stack exchange,提问作者Gol D. Roger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:31:07