ActiveRecord has_many 其中表 A 中的两列是表 B 中的主键

2024-01-17

我有一个模型,Couple,有两列,first_person_id and second_person_id和另一个模型,Person,其主键是person_id并有专栏name

这是我想要的用法:

#including 'Person' model for eager loading, this is crucial for me
c = Couple.find(:all, :include => :persons)[0]
puts "#{c.first_person.name} and #{c.second_person.name}"

那么我该怎么做呢?


中声明的关系Couple应该看起来像这样:

class Couple
  named_scope :with_people, { :include => [:first_person, :second_person] }
  belongs_to :first_person, :class_name => 'Person'
  belongs_to :second_person, :class_name => 'Person'
end

#usage:
Couple.with_people.first
# => <Couple ... @first_person: <Person ...>, @second_person: <Person ...>>

那些在Person取决于是否Person可以是多个的一部分Couple. If a Person只能属于一个Couple并且不能成为“第一”Person上一和Second另一方面,您可能想要:

class Person
  has_one :couple_as_first_person, :foreign_key => 'first_person_id', :class_name => 'Couple'
  has_one :couple_as_second_person, :foreign_key => 'second_person_id', :class_name => 'Couple'

  def couple
    couple_as_first_person || couple_as_second_person
  end
end

If a Person可以属于多个Couples,并且无法判断它们是任何给定中的“第一”还是“第二”Couple, 你可能想要:

class Person
  has_many :couples_as_first_person, :foreign_key => 'first_person_id', :class_name => 'Couple'
  has_many :couples_as_second_person, :foreign_key => 'second_person_id', :class_name => 'Couple'

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

ActiveRecord has_many 其中表 A 中的两列是表 B 中的主键 的相关文章

  • Ruby 在 Windows 上找不到 sqlite3 驱动程序

    我正在尝试在 Windows 上设置 Ruby on Rails 我正在使用看起来不错的 Flash Rails 发行版 但是 sqlite3 有一个问题 我发现线程告诉我安装版本 1 2 3 安装得很好 我使用的是 ruby 1 9 0
  • Rails Active Storage - 保留现有文件/上传吗?

    我有一个 Rails 模型 has many attached files 默认情况下 通过 Active Storage 上传时 如果您上传新文件 它会删除所有现有上传内容并将其替换为新文件 我有一个控制器破解 由于多种原因 它不太理想
  • 为什么包含此模块不会覆盖动态生成的方法?

    我试图通过包含一个模块来覆盖动态生成的方法 在下面的示例中 Ripple 关联添加了rows 方法表 我想调用该方法 但之后还要做一些额外的事情 我创建了一个模块来重写该方法 认为该模块的row 可以打电话super使用现有的方法 clas
  • NameError:未初始化的常量 Gem::SourceIndex

    对于没有任何修改的新 Rails 应用程序 在访问主页时 成功运行后 会出现此错误bundle install 以下是版本号 ruby 1 9 3p392 2013 02 22 revision 39386 x86 64 darwin12
  • RailsAdmin 中具有 join_table 和 has_many :through 的模型的路由错误

    所以我有3个模型 category product category products 这是我的category rb attr accessible name has many category products do def with
  • HMC SHA1 哈希 - C# 生成与 Ruby 不同的哈希输出

    我正在尝试为我正在使用的第三方服务快速获取一个有缺陷的 Net 客户端库 原始库 可以运行 是用 Ruby 编写的 但 DotNet 的等效库会向 Ruby 库生成不同的哈希输出 Ruby加密代码如下 def self encrypt st
  • 捆绑包安装无法离线工作

    我得到了这个问题 我想已经安装了捆绑器 因为我无法在 RoR 中创建应用程序时捆绑安装 也无法直接在项目中捆绑安装 如果您遇到任何问题并找到解决方案 请帮助我 enter code here run bundle install Fetch
  • Rails 3 分页,will_paginate 与 Kaminari

    我的设置 Rails 3 0 9 Ruby 1 9 2 我正在为我的应用程序寻找分页解决方案 发现有一个新的宝石Kaminari与值得信赖的人相比will paginate 看起来像will paginate有一段时间没有更新了 但后来又以
  • Devise:允许用户注册为“UsErNaMe”但使用“用户名”登录

    与大多数网站的工作方式相同 我将 UsErNaMe 存储在数据库中 但让用户使用 用户名 登录 这是一个相当明显且必要的功能 很多人似乎都问过它 但我不断遇到的解决方案似乎与 Devise 自己的文档脱节 例如 考虑这篇博文 http an
  • 用于 S3 私有文件的 ActiveStorage

    到目前为止 我一直在使用 Paperclip 将一些文件上传到 S3 其中一些文件不是公开的 Paperclip 允许通过以下位将一些文件作为私有文件上传 has attached file image styles large 2000x
  • 添加两个 ActiveRecord::Relation 对象[重复]

    这个问题在这里已经有答案了 如何将两个关系添加在一起 当我尝试 运算符时 它返回一个数组 但我需要它来返回关系 谢谢 麦克风 Try new relation relation merge another relation
  • 将一幅图像合成到另一幅图像上时,RMagick 透明度不起作用

    在下面的代码中 我尝试在一些山脉的图像上覆盖一个透明的正方形 我认为它会起作用 但是通过设置background color none 它不会使图像透明 结果是左上角有一个黑色方块 所需的结果是黑色方块应该是透明的 require open
  • 我应该如何使用 alias_method_chain 作为构建方法?

    我正在使用 Ruby on Rails 3 2 13 我想正确使用alias method chain build option name声明 因为我收到一个奇怪的错误 那是 在我的控制器文件中我有 class Articles Comme
  • 如何使 Yard `@macro` 应用于多个文件

    如果我有在one file下列 module Something class Resource Defines a new property param String name the property name param Class t
  • 是否有像数据库的 JDBC 一样的 NoSQL/键值存储抽象库?

    我使用过很多 SQL 抽象库 例如 ODBC JDBC 和 ActiveRecord NoSQL 键值存储世界中有哪些抽象选项 我主要是问这个问题 这样如果我选择键值存储 那么我就可以使用抽象库而不会被锁定 考虑到周围键值存储的数量 我认为
  • Rails 4 可安装引擎,找不到文件“jquery”

    我正在创建一个 Rails 可安装引擎插件 它使用 gem jquery rails 我在 gemspec 文件中添加了这段代码 s add dependency jquery rails gt 3 0 1 and run bundle i
  • 从数组中删除空白元素

    当我从 ruby on Rails 表单中保存多个选择时 它似乎在前面添加了一个空白元素 我该如何删除它 该字段为 selected player utf8 gt authenticity token gt H8W7qPBezubyeU0a
  • 查找 Rails 应用程序中未使用的代码

    如何查找正在运行和未运行的代码生产中 该应用程序经过充分测试 但还有很多测试unused代码 因此 他们在运行测试时得到覆盖 我想重构并清理这个烂摊子 它一直在浪费我的时间 我有很多后台工作 这就是为什么我希望生产环境来指导我 在 Hero
  • 将记录批量插入到 Active Record 表中

    我发现我的Model create 当我一次添加大量记录时 语句需要很长时间才能运行 看着ActiveRecord 导入 https github com zdennis activerecord import wiki但它不适用于哈希数组
  • Rails:Passenger Standalone 适合生产部署吗?

    问题标题几乎概括了这一点 我找不到任何好的资源来概述使用 Phusion Passenger Standalone 进行 Rails 应用程序部署的优点 缺点 它与运行 Passenger Nginx 或 Passenger Apache

随机推荐

  • React Router 传递参数。如何?

    具有以下 React Router const AppRoutes
  • Autofac 已下载,我可以访问构建器方法,但不能访问 RegisterControllers 方法

    下面的代码是我到目前为止所拥有的 RegisterControllers 方法不存在 尽管我可以在 autofac 文档以及其他堆栈溢出问题上看到它 Visual Studio 一直说 ContainerBuilder 不包含 Regist
  • 使用 TypeFamilies 派生实例

    我有一个类型类Foo具有关联类型 LANGUAGE TypeFamilies class Foo a where type Bar a foo a gt Bar a 现在我想定义一个包含关联类型之一的数据类型 并派生一个Show它的实例 d
  • HTML与大虾

    我尝试使用 prawn 生成日志条目的 PDF 然后条目存储在 bbcode b bold b 等 中并转换为 html 显示 大虾有什么办法可以显示html吗 这听起来像虾格式 http github com sandal prawn f
  • WordPress 页面重定向到主页

    我有一个 WordPress 网站http www wjewel com http www wjewel com 网站的所有页面都被重定向到主页 没有用于重定向的 htaccess 文件或 web config 文件 有人可以指导我这个问题
  • 如何重复更新android TextView来模拟动画

    我希望一旦按下菜单中的按钮 TextView 中的文本就会不断变化 这是我的菜单的 onOptionsItemSelected public boolean onOptionsItemSelected MenuItem item switc
  • pip3安装pyautogui,错误代码1

    我无法安装 pyautogui 我已经尝试了一切 例如 pip3 install pillow 也按照网站上的步骤操作pyautogui 网站 http pyautogui readthedocs io en latest install
  • 配置 Redis 以与 AppHarbor 良好配合

    我使用 AppHarbor 作为 CI 环境来验证我的提交 我在 AppHarbor 中收到错误 因为 Redis 无法写入磁盘 Error RedisResponseException MISCONF Redis is configure
  • Adobe AIR 键盘挂钩

    我正在尝试向我的 AIR 应用程序添加一项功能 即使应用程序最小化 该功能也可以侦听 可配置的 全局键盘事件 例如 CTRL ALT SHIFT F12 抓取屏幕截图 我找不到任何方法来注册键盘挂钩 并且监听键盘事件仅在应用程序具有焦点时捕
  • 如何防止 iframe 页面被插入 IE 浏览历史记录中

    我在将 iframe 页面插入 IE9 的浏览历史记录时遇到很多麻烦 这很痛苦 因为您必须多次单击后退才能到达上一页 这是什么原因呢 是浏览器的bug还是页面的bug 编辑 我意识到我正在使用 javascript 来更新页面上所有 ifr
  • C++ Map 使用非默认构造函数初始化对象

    在 C 中 假设我有一个无序映射定义如下 unordered map
  • Process.Start() 明显慢于在控制台中执行

    我使用以下命令执行 exe 时遇到性能问题Process Start NET 的执行时间大约是控制台的 5 倍 什么会导致这种情况 这是一个测试程序 public static void Main string argv for int i
  • 如何将事件对象传递给命名函数

    我有一个用于单击事件的事件处理程序 事件处理程序是一个命名函数而不是匿名函数 如何将事件对象传递给这个命名函数 usual example sel click function ev do stuff which involves the
  • notifyDataSetChanged 不会刷新 RecyclerView

    我有一个奇怪的问题 我切换到RecyclerView from ListView我无法刷新或通知我的更改ListView 我尝试打电话Item this notifyDataSetChanged 以及其他刷新方法View但它不起作用 反而R
  • setImeOptions:为什么软键盘上不显示“完成”按钮?

    我尝试使用以下命令在软键盘上设置 完成 按钮input setImeOptions EditorInfo IME ACTION DONE 但 完成 按钮根本不显示在软键盘上 请问有什么建议吗 public void modif int po
  • 切换弹出窗口并在外部单击时切换它

    我有一个问题 我正在尝试制作一个弹出窗口切换toggleClass 不过 我还制定了一条从 StackOverflow 获得的规则 当在外部单击时 弹出窗口会消失 但是 当我单击登录按钮时 它会出现 但我无法再使用登录按钮使其消失 但我已经
  • 2D OpenGL 场景因大量重叠形状而变慢

    我正在使用 OpenGL 绘制 2D 形状 他们没有使用那么多多边形 我注意到我可以有很多很多的形状 只要它们不重叠 如果我在一个形状后面得到一个形状 等等 它真的开始滞后 我觉得我可能做错了什么 这是正常的吗 有没有办法解决这个问题 我不
  • 猫效应和异步 IO 细节

    这几天我一直在思考猫效应和 IO 我觉得我对这种效果有一些误解 或者只是我错过了它的要点 首先 如果IO可以取代Scala的Future 我们如何创建异步IO任务 使用IO shift Using IO async Is IO delay同
  • 将 pandas 中的多列除以另一列

    我需要将 DataFrame 中除第一列以外的所有列除以第一列 这就是我正在做的事情 但我想知道这是否不是 正确的 熊猫方式 df pd DataFrame np random rand 10 3 columns list ABC df B
  • ActiveRecord has_many 其中表 A 中的两列是表 B 中的主键

    我有一个模型 Couple 有两列 first person id and second person id和另一个模型 Person 其主键是person id并有专栏name 这是我想要的用法 including Person mode