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

如何在不指定父资源且不使用shallow的情况下生成嵌套资源URL?

解决方案:在模型层面配置自动生成嵌套URL

当然可以做到!而且完全不需要修改路由结构或者启用shallow嵌套,只需要在你的Notification模型里加几行代码就能实现这个需求。

1. 确认你的路由结构(你应该已经配置好了)

首先确保你的路由是标准的嵌套结构,比如:

# config/routes.rb
Rails.application.routes.draw do
  resources :organizations do
    resources :notifications
    # 其他嵌套在组织下的资源也可以用同样方法处理
  end
end

2. 给Notification模型添加to_ary方法

在app/models/notification.rb中添加以下代码:

class Notification < ApplicationRecord
  belongs_to :organization
  # 你的其他模型逻辑(比如验证、回调等)...

  def to_ary
    [organization, self]
  end
end

3. 效果说明

当你使用link_to "查看通知", @notification时,Rails的路由助手会自动识别to_ary方法,把@notification转换成[@organization, @notification]数组,从而生成符合要求的URL:/:organization_id/notifications/:id。

不仅是link_to,其他生成URL的方式比如notification_url(@notification)也会自动生成嵌套路径的URL,完全满足你不用手动传入父组织的需求,同时也保留了URL中的组织ID。

注意事项

  • 确保每个Notification实例都正确关联了Organization,否则调用organization方法会返回nil,导致生成URL时出错。
  • 如果你的应用里还有其他嵌套在Organization下的资源(比如Event、Task等),都可以套用这个方法,给对应模型添加to_ary方法返回[organization, self]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:17