Rails 3 中的嵌套 has_many :through

2024-06-24

我知道 Rails 不支持嵌套的 has_many :through 关系,尽管早在 Rails 2 中就已经有关于补丁的讨论和开放票证。

我确实来了跨插件 https://github.com/ianwhite/nested_has_many_through这非常流畅,但是主分支不能与 Rails 3 一起使用,而且我对于是否将其用于应用程序中的关键任务任务犹豫不决,因此最近缺乏活跃的开发。那么——处理这些关系的最佳方式是什么?

class Author < ActiveRecord::Base
  has_many :contracts
  has_many :products, :through => :contracts

class Product < ActiveRecord::Base
  has_many :contracts
  has_many :orders
  has_many :authors, :through => :contracts

class Contracts < ActiveRecord::Base
  belongs_to :author
  belongs_to :product

因此,如果能够通过将其添加到 Author 模型来获得订单,那就太棒了:

has_many :orders, :through => :products

但可惜的是,你不能——至少没有插件。所以,我的问题是,当唯一的关联存在于连接模型和合同之间时,访问所有作者订单的最佳方法是什么?


如果您不尝试通过嵌套关联创建对象,而只想将其用于查找,那么 Rails 3 中的作用域是实现此目的的好方法。或者,您可以实现一个类方法。

我最近在教的课上就遇到过这样的事情,Rails 3版本的代码在这里:https://github.com/wolframarnold/Efficient-TDD-Rails3/blob/master/app/models/user.rb https://github.com/wolframarnold/Efficient-TDD-Rails3/blob/master/app/models/user.rb

请参阅 items 方法的定义。规格在这里:https://github.com/wolframarnold/Efficient-TDD-Rails3/blob/master/spec/models/user_orders_spec.rb https://github.com/wolframarnold/Efficient-TDD-Rails3/blob/master/spec/models/user_orders_spec.rb

Rails 3.1 更新:正如一位评论者已经指出的那样,Rails 3.1 确实支持 has_many :通过超过一层深度的关联。

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

Rails 3 中的嵌套 has_many :through 的相关文章

随机推荐

  • 为什么 expo 文件系统在 Jest 中不起作用?

    我正在尝试为我的小项目编写一些测试 我们使用 expo file system 来允许我们访问 IOS 内部存储 这是我对我们的保存功能的测试 import SaveData from app resources SaveData Save
  • 如何访问地图内正确的“this”:ReactJS [重复]

    这个问题在这里已经有答案了 例如 我有一个具有两种绑定方法的反应组件 import React from react class Comments extends React Component constructor props supe
  • Visual Studio 代码:无法找到 phpcs

    我在 Visual Studio Code 中遇到这个问题 我已经尝试重新安装 phpcs 扩展 但仍然面临这个问题 无法找到 phpcs 请加phpcs到您的全局路径或使用 Composer 依赖管理器将其安装到 Visual Studi
  • 从 Html 样式的 TextView 获取文本[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I have a TextView which contains text with Html attributes like subsc
  • 如何将完整图像完美地放入滑块中?

    我是这个 CSS 的新手 我的第一个滑块中有 2 个图像 实际目标是考虑将其完整图像显示到该滑块中 但不幸的是 我无法使图像完美地适合滑块 因为图像宽度比滑块宽度更大 这是该滑块的 CSS 代码 ei slider position rel
  • MarkLogic 数据中心框架快速入门中心 - 连接到远程实例时出现错误“不支持的身份验证方案:[Basic Realm=public]”

    我正在从我的工作站测试 ML DHF Quickstart Hub 并且可以很好地连接到 MarkLogic 的本地实例 但是当我创建一个新环境时gradle DEV properties文件并尝试连接到远程 MarkLogic 集群时出现
  • 运行时错误:分配给 nil 映射中的条目

    我正在尝试生成一个地图 然后将其转换为 yaml 文件 如下所示 uid kasi cn Chaithra street fkmp nandan cn Chaithra street fkmp remya cn Chaithra stree
  • 处理 1.15 亿个细胞的最快方法是什么?

    我收到了一项工作任务 其中我要查找 8 位数字并将其替换为来自 2 列表的相应新值 基本上是一个 vlookup 然后用新值替换旧值 我面临的挑战是 2 列表有 882k 行 我尝试替换的单元格约为 1 2 亿 41 000 行 x 300
  • 如何在 JavaScript 中检查字符串是否包含子字符串数组中的文本?

    非常简单 在 javascript 中 我需要检查字符串是否包含数组中保存的任何子字符串 没有任何内置功能可以为您执行此操作 您必须为其编写一个函数 尽管它可能只是对some数组方法 两种方法适合您 Array some method 正则
  • 如何提高图像质量? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一个读取身份证的 OCR 使用 YOLO 获取感兴趣的区域后 我将裁剪后的区域交给 Tesseract 来读取它 由于这些裁
  • 单步执行会产生与运行不同的结果

    我有一段代码用于拆分单元格中的文本 数据是由不使用任何有用的分隔符的调查程序输出的 因此不幸的是 将文本转换为列对我没有任何帮助 我写了这段代码 但事实证明 两种情况下结果是不同的 我一步步运行代码 直到添加第一列 然后让它完成 我从执行宏
  • 在Android中的对话框中加载webview时获取void android.webkit.WebView.loadUrl?

    我收到此错误原因是 java lang NullPointerException 当我尝试在 android 中的对话框内加载 webview 时尝试调用虚拟方法 void android webkit WebView loadUrl 我已
  • 流状态计算:累积和

    假设我有一个Java IntStream 是否可以将其转换为具有累积和的IntStream 例如 以 4 2 6 开头的流应转换为 4 6 12 更一般地说 应该如何实施有状态流操作 感觉这应该是可能的 myIntStream map ne
  • 应用程序最右侧的顶部菜单

    默认情况下 Codename One顶部菜单位于标题区域的左侧 是否可以将其改为右侧 Command services new Command Services servicesIcon Override public void actio
  • 将同义词分析器添加到elasticsearch索引中

    我有一个现有的elasticsearch索引 我想添加一个分析器 但是当我执行这个命令时 analysis analyzer synonym tokenizer whitespace filter synonym filter synony
  • 有没有办法忽略 mypy 对单个函数的检查?

    您可以忽略 mypy 对单行的检查作为回答here https stackoverflow com questions 49220022 how can mypy ignore a single line in a source file
  • 使用 $http 拦截器取消请求?

    我想弄清楚是否可以使用 http拦截器在请求发生之前取消请求 有一个按钮可以触发请求 但如果用户双击它 我不希望相同的请求被触发两次 现在 我意识到有几种方法可以解决这个问题 并且我们已经有了一个可行的解决方案 我们将其包装起来 http在
  • Ping 到 APNS 未返回

    我正在尝试连接到 Apple 的推送通知服务器并推送一些通知 所有连接尝试都超时 尝试 ping 服务器gateway sandbox push apple com and gateway push apple com并且他们无法到达 这些
  • toastr 和 ember.js

    是弹出库toastr https github com CodeSeven toastr由于 ember 不喜欢直接 dom 操作 因此不打算与 Ember 一起使用 还有其他类似的库可以与 ember 很好地配合吗 Edit 即使通过下面
  • Rails 3 中的嵌套 has_many :through

    我知道 Rails 不支持嵌套的 has many through 关系 尽管早在 Rails 2 中就已经有关于补丁的讨论和开放票证 我确实来了跨插件 https github com ianwhite nested has many t