使用单个标识符 REST 方式嵌套资源路由

2024-01-17

在我的 Rails 应用程序中,两个实体之间有一个相当标准的 has_many 关系。 AFoo有零个或多个Bars; a Bar恰好属于一个Foo。 Foo 和 Bar 均由单个整数 ID 值标识。这些值在其各自的所有实例中都是唯一的。

Bar 的存在依赖于 Foo:没有 Foo 的 Bar 是没有意义的。

有两种方法可以 RESTful 引用这些类的实例。给定 Foo.id 为“100”和 Bar.id 为“200”:

  1. 通过它们自己的“顶级”URL 路由引用每个 Foo 和 Bar,如下所示:

    • /foo/100
    • /bar/200
  2. 通过其 Foo 实例将 Bar 引用为嵌套资源:

    • /foo/100
    • /foo/100/酒吧/200

我喜欢#2 中的嵌套路由,因为它更接近地代表实体之间的实际依赖关系。然而,它似乎确实涉及大量额外的工作却收效甚微。假设我知道某个特定的 Bar,那么我不需要被告知特定的 Foo;我可以从酒吧本身得出这一点。事实上,我可能应该在我去的任何地方验证路由的 Foo (这样你就不能执行 /foo/150/bar/200,假设 Bar 200 没有分配给 Foo 150)。最终,我不明白这会给我带来什么。

那么,有没有other支持或反对这两种路由方案的论点?

澄清点

我最关心的是特定 Bar 的 RESTful 更新/显示/删除。为了获取特定 Foo 的 Bar 列表(通常是 Rails 中的“索引”操作),使用嵌套路由(例如 /foo/100/bar)是非常有意义的。不过,此路线上的页面可以像链接到 /foo/100/bar/x 一样轻松链接到 /bar/x 。


您正在寻找浅水路线。正如您所指出的,为创建、更新等内容设置深层嵌套路由的想法是不必要的,因为您直接针对所需的记录。

我从来没有真正做过浅层路由的事情,所以我会跳过 Railscast 的那一集,其中 Ryan Bates 的解释可能比我更好:139 嵌套资源 http://railscasts.com/episodes/139-nested-resources.

编辑:您可以阅读更多内容路由指南 3.8.4 http://guides.rubyonrails.org/routing.html#nested-resources.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用单个标识符 REST 方式嵌套资源路由 的相关文章

  • $ bundle exec rake db:reset 命令提升无法删除 db/development.sqlite3

    我试着跑 bundle exec rake db reset并在控制台上发现以下内容 Couldn t drop db development sqlite3
  • 使用 Ruby on Rails 索引多列

    我在 Mysql 数据库中有一个表 我想在其上使用多列索引 如何在不使用 mysql 控制台的情况下在 Rails 中执行此操作 在迁移定义中 您可以这样做 add index table name column1 column2
  • Cucumber 是否不需要编写单元测试?

    我对 Ruby ROR 可用的测试框架数量之多感到有点困惑 我最近看了黄瓜轨道广播 http railscasts com episodes search cucumber并发现它们非常有趣 所以我开始玩游戏 然后努力从概念上考虑在哪里进行
  • 设计重定向到成功登录似乎在第一次登录尝试时卡住

    我正在使用 Ruby on Rails 开发一个小型应用程序 并使用 Devise 进行身份验证 我有两个登录系统设置 一个是user另一个是employee 当使用正确的电子邮件和密码登录时 设计会发送正确的重定向到返回路径 但它会卡在那
  • 如何通过Grape API获取路由

    我使用 gem grape 作为 api 我尝试通过命令获取 api urlrake grape routes namespace grape do desc routes task routes gt environment do API
  • 多步ActiveRecord的模型验证

    考虑具有以下字段的用户模型 名字 必填 姓氏 必填 电子邮件 必填 要求输入密码 电话 必填 大小 10 位数字 地址 必填 以及包含以下步骤的多步骤注册表单 第一步 包含 名字 姓氏 和 电子邮件 字段 第二步输入密码 电话和地址 您将如
  • MVC3 中定义路由的文件

    我有这个文件
  • Rails ActiveRecord:是否可以组合 :include 和 :conditions 查询?

    想象一下我有 wiki 文章 有很多修订 我想通过数据库使用 ActiveRecord 进行查询 该查询仅返回那些在过去 24 小时内更新过修订的文章 这样的事可能吗 我想它会是这样的 Articles find all include g
  • 动态分配背景图片scss/sass

    我想要做的是有一个表单 您可以在其中上传图片 然后当您查看该对象时 图片会在特定 div 中居中 垂直和水平向上倾斜 其大小未知等 除非有办法使用 image tag 帮助器将其垂直居中 否则我希望能够使用该图像作为背景图像 在我的 css
  • Rails 急切加载计数?

    使用 include 属性可以很好地进行预加载 Post find all include gt author 我想知道您是否也可以急切加载计数 例如我是否想获取每个帖子的评论数量 而不加载所有评论本身 也许像 Post find all
  • 未签出...捆绑安装无法修复帮助!

    https github com intridea omniauth git at master is not checked out Please run bundle install Bundler GitError 那我该怎么办 捆绑
  • 默认更新嵌套属性

    我尝试更新 iProduction 这是生产中的嵌套表单 但此行出现参数错误 参数数量错误 0 代表 1 生产 update iproducts attributes cow id cow 我的创作动作制作 def create produ
  • 使用ajax轮询服务器

    我正在建立一个网站 该网站有一个用户可以互相发送消息的系统 我希望这样当登录用户收到消息时 他会在屏幕上看到一些更新告诉他这一点 这些消息不必是实时的 所以我认为我不想用彗星或主宰之类的东西来推动 相反 我很乐意每隔一分钟左右轮询一次服务器
  • 对 Rails 3.1 中的特定路由强制使用 SSL

    我需要强制启用 SSL所有路线在我的申请中除了landing index In config application rb 我有 config force ssl true Then in landing controller rb 我有
  • 将 Twitter 引导样式添加到 Rails 表单助手

    在阅读建议我使用带有引导程序集成的 Simple form gem 的答案后 我安装了它并根据 simple form 说明创建了我的表单 但输入框向右浮动 这是布局 正在使用部分 shared reg 调用该表单 div class co
  • Angular 和 Node JS 中的路由问题 [Angular]

    我有角度js的问题 我创建了 login html 和 home html 成功登录后我想将页面更改为 home html 我的路由不起作用 默认 url 是 localhost angular 我尝试路由 realpath 即 local
  • 不同 servlet-api 版本冲突

    我正在使用 Maven 和 Jetty 作为服务器来开发 RestEasy Web 服务 其中一项服务应使用扩展 javax servlet http HttpServletResponseWrapper 的 Filter 问题出在来自 s
  • Heroku 上的 Google Vision API 身份验证

    在 Heroku 上验证 Vision API 的最佳 简单方法是什么 在开发中我只使用 vision Google Cloud Vision new project instacult keyfile path to keyfile js
  • Rails 应用程序在模型间保存方面遇到问题

    我正在开发一个从网站下载元标签并然后保存的应用程序 下载发生在一个名为Site 我想将下载的机器人元标签保存到一个名为的模型中robots tag它通过一个名为的连接表连接到站点meta tag sites 但是我在站点模型中编写的用于执行
  • 有人可以用简单的术语解释“超文本作为应用程序状态的引擎”

    这似乎是我最难理解的 REST 原则 我知道 在设计 REST API 时 大部分精力应该花在为应用程序设计 描述超文本上 对于这个原理的现实世界应用有什么指示吗 原子协议如何应用这个原理 有人可以简单地解释一下如何将其应用到假设的购物车

随机推荐

  • Powershell函数递归获取元数据

    我正在修改一些 powershell 代码 我发现这些代码可以递归地从文件中获取元数据 但我在访问文件夹中的文件夹时遇到问题 我从 share 下直接列出的文件夹中获取元数据 而不是从那里的文件夹和文件中获取元数据 如何将此代码修改为文件夹
  • 为什么 notebook() 对 IJulia 不起作用?

    我在尝试使用时收到此问题notebook 在 Julia 命令行界面 REPL 中 julia gt using IJulia Info Precompiling IJulia 7073ff75 c697 5162 941a fcdaad2
  • 如何在没有太多引号的情况下序列化 JsonObject?

    我正在 com google gson JsonObject 上编写一个小型流畅的包装器 当我序列化 Json 时 我得到 key1 value1 key2 value2 key3 innerKey value3 如何去掉多余的引号 My
  • Microsoft Translator Text API 打破了 notranslate 跨度

    我正在使用 Microsoft Translator Text API 来翻译一些句子 我的句子包含一些我不需要翻译的文本部分 为了实现这一点 我使用 span class notranslate span 通过包装不可翻译的文本 在大多数
  • iOS 使用 AVAssetWriter 捕获视频时如何正确处理方向

    我正在制作一个利用 AVFoundation 录制视频的示例应用程序 重点是这样我可以更好地控制视频的录制方式 在我的示例项目中 我进行了视频捕获 但在正确处理方向方面遇到了困难 我在网络上进行了大量搜索 发现其他人建议我不应允许我的捕获视
  • long.Parse() C#

    在 C 中 如何将字符串 例如 100 100 转换为 long 我目前有一行代码是 long xi long Parse x System Globalization NumberStyles AllowThousands 但当 x 是
  • const 引用右值的类数据成员的生命周期是多少?

    一般来说 这个讨论仅取决于局部函数变量 void foo const int i use i till foo ends foo 3 但是 这条规则是否适用于class会员还 struct A const int a A a 3 versi
  • 实现 StickyGridHeaders Android 时标题中的按钮

    我正在尝试使用粘性网格标题 https github com TonicArtos StickyGridHeaders在我的 Android 应用程序中 它工作得很好 除非我尝试将点击监听器添加到 headerview 中的可点击 Imag
  • 使用 Eclipse 在 Android 虚拟机中启动 Android java 项目时出现问题

    我已经安装并设置了 Eclipse 和插件 ADT 以便与 Android SDK 一起使用 到目前为止 一切都很好 但是 当我尝试为我选择的任何 android 平台 例如 android 3 2 启动 VM 虚拟机 时 我只是将皮肤与键
  • Rapidjson C++ 释放对象内的数组

    我正在使用rapidjson C 库 https github com miloyip rapidjson 使用此库您可以创建 JSON 对象 目前我有一些记忆问题 情况 在我当前的设置中 我创建了一个新对象 并向其添加了值成员和数组成员
  • 将引导日期时间选择器与 Vuejs 2 结合使用

    我想将日期时间选择器与 vue 2 或 webpack 集成 我尝试搜索但找不到相关文章 有没有人将日期时间选择器与Vue2或webpack集成 有任何示例代码可供参考吗 任何帮助将不胜感激 Thanks 只需谷歌搜索 您肯定可以找到有关该
  • 如何在 Linux 2.6.35 上从用户模式清除和无效 ARM v7 处理器缓存

    我尝试清除指令行的 ARM v7 处理器缓存并使之无效 因为指令代码在执行中可能会发生变化 为了达到效果 我尝试了两种变体 他们来了 我用过海湾合作委员会 清除缓存 函数 但没有给出所需的结果 缓存中的指令代码没有改变 我寻找了 GCC 的
  • CountDownLatch 是否受到虚假唤醒的影响?

    诸如等待 通知和锁定 条件之类的并发管理机制似乎受到以下因素的影响虚假唤醒 https en wikipedia org wiki Spurious wakeup 开发人员通过重新检查情况是否确实发生变化来应对这些意外的唤醒 当谈到 Cou
  • 如何使用 Sql Profiler 捕获 SqlBulkCopy 中传递的数据?

    我一直在使用 Sql Profiler 来捕获 SQL 语句并重新运行有问题的语句 很有用 但是 有些代码使用 SqlBulkCopy API 我不知道如何捕获这些代码 我看到临时表的创建 但没有填充它们 似乎 SqlBulkCopy 绕过
  • Activity 的实例什么时候会消亡?

    这是一个示例代码 让我有点想念 package com leak import android app Activity import android app ProgressDialog import android os AsyncTa
  • 随机选择设置位的有效方法

    我当前的爱好项目为纸牌游戏提供蒙特卡罗模拟French牌组 52 张牌 从 2 到 A 为了尽可能快地进行模拟 我在某些地方将多张卡表示为位掩码 这是一些 简化的 代码 public struct Card public enum Card
  • 将特征矩阵转换为 C++ 形式的三元组

    我认为 Eigen 使用压缩方法来存储稀疏矩阵 有什么方法可以从 std vectors 中提取特征稀疏矩阵的三重格式向量 Thanks 更多信息 三元组格式的示例 矩阵的三元组格式 A 3 0 4 0 0 0 1 0 0 2 0 5 4
  • Selenium - 跨域和 HTTPS 问题

    我使用 Selenium 来测试我的网站 该网站需要访问外部目录才能从中选择一些项目 问题是该目录是通过 HTTPS 协议发布在另一个域上的 我在互联网上搜索并阅读了许多有关 Selenium 和跨域问题的主题 但我仍然没有找到答案 有些主
  • 在 python seaborn 图中创建多列图例

    我在用seaborn distplot python3 并希望每个系列有 2 个标签 我尝试了一种黑客字符串格式方法 如下所示 bigkey and bigcount are longest string lengths of my key
  • 使用单个标识符 REST 方式嵌套资源路由

    在我的 Rails 应用程序中 两个实体之间有一个相当标准的 has many 关系 AFoo有零个或多个Bars a Bar恰好属于一个Foo Foo 和 Bar 均由单个整数 ID 值标识 这些值在其各自的所有实例中都是唯一的 Bar