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

如何用单个控制器创建2个路由?调整Contacts控制器的vendors路由路径

嘿,我来帮你搞定这两个Rails路由问题,都是日常开发里很常见的场景~

问题1:仅用一个控制器创建2个路由

这事儿超简单,直接在你的config/routes.rb文件里,为同一个控制器指定不同的路由规则就行,分两种常见情况:

情况1:两个路由对应控制器的不同动作

比如你有一个PagesController,想创建/home和/about两个路由,分别对应控制器里的home和about动作,写法如下:

get 'home', to: 'pages#home'
get 'about', to: 'pages#about'

情况2:两个路由对应控制器的同一个动作

如果想让两个不同URL触发同一个动作(靠参数区分逻辑),可以这么写:

get 'home', to: 'pages#show', defaults: { page: 'home' }
get 'about', to: 'pages#show', defaults: { page: 'about' }

之后在PagesController的show动作里,就能通过params[:page]判断是处理home还是about的逻辑了。


问题2:为Contacts控制器添加独立的vendors路由

你现在用resources :contacts生成的嵌套路由不符合需求,咱们直接把vendors/:id这个路由单独拎出来,指定到ContactsController的vendors动作就行,完全不用新建控制器。

步骤1:修改routes.rb

把独立的vendors路由放在resources :contacts之前(避免被RESTful路由规则覆盖),写法如下:

# 定义独立的vendors路由,生成路由辅助方法vendor_path(id)
get 'vendors/:id', to: 'contacts#vendors', as: :vendor

# 保留原有的contacts资源路由
resources :contacts

步骤2:在ContactsController里添加动作

接下来只需要在ContactsController里新增vendors动作,处理对应的业务逻辑:

class ContactsController < ApplicationController
  # ... 你已有的其他动作

  def vendors
    # 比如根据params[:id]获取对应的Contact记录
    @contact = Contact.find(params[:id])
    # 后续渲染视图、返回JSON等逻辑
  end
end

这样访问vendors/123就会直接触发ContactsController#vendors动作,路径完全符合你的需求~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:27:38