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

Rails 5中如何编写link_to生成"/path/id"格式的目标路径链接?

Rails 5 生成基于Person ID的路径解决方案

我来帮你梳理下解决思路哈,你要的是生成/path/id格式的链接,其中id是Person对象的ID而非Vote的,咱们从路由配置和link_to写法两个方面来调整:

一、先调整路由配置(核心步骤)

首先得确保路由能识别用Person ID作为路径参数,有两种常用方式:

1. 自定义单个路由(适合仅需特定动作的场景)

如果只需要针对某个动作(比如查看投票的show动作)生成目标路径,直接在config/routes.rb里添加自定义路由:

# 比如你要的path是votes,就这么写
get '/votes/:person_id', to: 'votes#show', as: :person_vote

这里的as: :person_vote是给路由起个命名,方便在link_to里调用。

运行rails routes命令可以看到这条路由的信息:

person_vote GET    /votes/:person_id(.:format)  votes#show

2. 修改资源路由的参数(适合整个Vote资源都基于Person ID的场景)

如果你的Vote资源所有操作都要用到Person ID作为路径标识,可以修改资源路由的param选项:

resources :votes, param: :person_id

这样所有Vote相关的路径都会用Person ID代替默认的Vote ID,比如vote_path(@person)会生成/votes/123(123是Person的ID)。

⚠️ 注意:这种方式下,你需要在VotesController里调整参数获取逻辑,比如show方法:

def show
  @person = Person.find(params[:person_id])
  @vote = @person.vote # 假设Person和Vote是一对一关联,根据你的实际关联调整
end

路由配置好后,对应的link_to写法就很清晰了:

对应自定义路由的写法

如果用了第一种自定义路由(as: :person_vote),直接传入Person对象即可,Rails会自动提取它的ID填充到路径里:

link_to '查看该用户的投票', person_vote_path(@person)

如果想手动指定参数也可以这么写:

link_to '查看该用户的投票', person_vote_path(person_id: @person.id)

对应修改param的资源路由写法

如果用了第二种资源路由配置,直接用Vote的命名路由传入Person对象:

link_to '查看投票', vote_path(@person)
# 编辑页面的话就是 edit_vote_path(@person)

排查小技巧

如果还是生成不对的链接,先运行rails routes命令确认路由的命名和参数是否正确,比如有没有把:person_id作为路径参数,路由名称是不是你在link_to里用的那个。另外要确保视图里的@person对象是正确获取到的(比如在控制器里已经用@person = Person.find(params[:id])实例化了)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:00:54