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

Rails跨嵌套模型下Goal页关联Tracker的链接问题求助

问题根源

你的链接失效是因为路由助手使用错误:当前路由中Tracker是嵌套在Contact资源下的,不存在goal_tracker_path这个路由辅助方法,调用它会直接报错。

从你的routes.rb可以看到,Tracker的路由定义是:

resources :contacts do
  resources :trackers do
    resources :emails
  end
end

对应的Tracker详情页路由是/contacts/:contact_id/trackers/:id,对应的路由助手是contact_tracker_path(contact, tracker)。

修复步骤

1. 修正链接代码

在Goal的show.html.erb中,把错误的goal_tracker_path替换为contact_tracker_path,并传入tracker所属的contact和tracker本身:

<% @goal.trackers.each do |tracker| %>
  <hr>
  <%= link_to contact_tracker_path(tracker.contact, tracker) do %>
    <p><%= tracker.title %> | <%= tracker.contact.first_name %></p>
  <% end %>
<% end %>

(顺便把for tracker in ...换成Rails更推荐的each迭代写法)

2. 优化控制器代码

你的Goal控制器show方法里的@trackers = Tracker.all和@tracker = Tracker.all完全多余,页面里用的是@goal.trackers,直接删掉这两行即可:

def show
  # 移除多余的Tracker.all赋值
end

可选:添加Goal与Tracker的嵌套路由(如果需要)

如果你希望有/goals/:goal_id/trackers/:id这样的路由,可以在routes.rb的goals资源下添加trackers嵌套:

resources :goals do
  resources :stages do
    resources :templates
  end
  resources :trackers # 新增这一行
end

此时运行rails routes会看到新增的goal_tracker_path路由助手,你的原链接代码就能正常使用了。不过注意,这样会生成两套指向Tracker#show的路由,需要确保TrackersController能处理两种参数(contact_id和goal_id)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:42:45