Rails 3 中的类表继承

2023-12-29

我目前正在开发一个 Rails 3 应用程序,它看起来可能需要对几个模型使用类表继承。

这是正在发生的事情的一个简化示例。

我有一个名为 Person 的类,具有诸如姓名、电子邮件、密码之类的通用属性,这些属性对于应用程序中的所有类型的人来说都是通用的,并用于身份验证。

人有两个子类(或两种类型的人......):驾驶员和乘客。这两个子类都共享 Person 的通用属性,但又具有它们自己独有的特定附加属性。 (例如,驾驶员可以拥有许多车辆和许可证,但乘客则不能)

对于这种情况我该如何实施CTI?我一直在看这里提供的一个例子:

http://rhnh.net/2010/08/15/class-table-inheritance-and-eager-loading http://rhnh.net/2010/08/15/class-table-inheritance-and-eager-loading

但它没有推测如何从 Driver 或 Passenger 对象访问 Person 的公共属性,我对此有点困惑。

我特别想知道的是:

如果我要更新驱动程序的属性,如何轻松访问和更新父人员表上的相关属性?我是否必须挂钩 after_save 回调并分离出哪个属性更新去哪里?或者有更好的方法来解决这个问题吗?


还有一个插件“acts_as_relation”可以做到这一点,
https://github.com/hzamani/acts_as_relation/ https://github.com/hzamani/acts_as_relation/

在你的情况下,代码将是这样的:

class Driver < ActiveRecord::Base
   acts_as :person
end

class Passenger < ActiveRecord::Base
  acts_as :person
end

别忘了添加person_type and person_id列到persons table.
现在 Drive 和 Passenger 都继承了 Person 属性、验证和方法。

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

Rails 3 中的类表继承 的相关文章

  • Capistrano 3 运行每个命令两次(新安装)- 配置问题

    我刚刚完成第一次 Capistrano 安装 大部分内容都保留为默认设置 我配置了我的服务器 其身份验证 远程文件夹以及对 git 存储库的访问 我使用 capistrano 将 php 代码部署到我的服务器 上限分期部署 and 上限生产
  • 带设计的嵌套形式

    这是我的注册表单 p br p p br p p br p
  • Rails 3 - 与其自身具有一对一关系的模型 - 我需要belongs_to

    我有一个名为 Person 的模型 它有两个属性 name 和parent person id 一个人总会有一个父母 我应该在模型中使用belongs to吗 如果是的话 这样做有什么好处 class Person lt ActiveRec
  • Rails——自我与@

    我正在关注 Michael Hartl 的 RoR 教程 它涵盖了密码加密的基础知识 这是当前的用户模型 class User lt ActiveRecord Base attr accessor password attr accessi
  • 如何根据多对多相关模型的属性查找记录?

    楷模 InternalUser has many internal user roles has many roles through gt internal user roles InternalUserRole belongs to i
  • Rails 命名空间与嵌套资源

    假设我的应用程序有两个模型 Foo 和 Bar Foo 可选地属于 Bar 现在我可以查看单个 Foo 或者搜索特定的 Foo FoosController 会处理所有这些 我的网址是这样的 foos 1 and foos new 有时我想
  • 黄瓜和 Rspec

    任何人都可以向我推荐黄瓜和 rspec 教程 rails 3 的好来源 简单示例 吗 Edit 实际上我正在寻找带有很好示例的免费在线资源 我觉得R规格书 http www pragprog com titles achbd the rsp
  • Rails 3 ActiveAdmin。如何为关联记录设置默认排序顺序?

    我有一个发货模型和一个发票模型 发票属于装运 所以我添加了一个默认的发货排序顺序 如下所示 config sort order file number desc 但现在我想为发票添加相同的排序顺序 发货表是具有 file number 列的
  • Rails 3 UJS 干客户端 + 服务器端表单验证

    使用 jQuery 进行表单验证就像向字段添加类名一样简单 使用 Rails 进行表单验证就像将条件放入控制器 和 或模型 中一样简单 我认为应该有一种方法可以编写一次验证并将它们应用到客户端和服务器端 我一直热衷于编写自己的 javasc
  • Carrierwave 在文件上传时抛出“堆栈级别太深”错误

    我有一个奇怪的问题 不知道如何进一步调试 如果我用 html 表单上传文件 我会得到 SystemStackError stack level too deep 痕迹是 Started POST global accounts 82 for
  • Rails——理解 db:migrate

    我在理解 Ruby on Rails 中的迁移时遇到了一些困难 我的应用程序中有以下两个类db migrate 目录 存储在单独的文件中 class CreateUsers lt ActiveRecord Migration def sel
  • 新手:我的例子中的文本替换

    In my 红宝石 on Rails应用程序中 我的助手中有一个方法 它通过以下方式打开文件 content File open myfile txt The 文件内容就好像 my car my seat my age my son my
  • Rails 日志太详细

    如何防止 Rails 记录过多日志 这是我的 production log 文件中的典型跟踪 许多部分 缓存命中 它在开发中很有用 但我不希望在我的生产环境中使用它 Started GET redirected true for 46 19
  • 如何在控制器内部使用 auto_link

    在我的控制器中 我需要构建一个 JSON 对象 如何在控制器内使用 auto link 现在它错误 NoMethodError undefined method mail to for
  • Rails 3 Link_to:远程未触发 RJS

    我正在使用以下代码在 Rails 3 中设置 AJAX 操作 代码的 AJAX 部分似乎可以工作 但它没有请求正确的文件 而我的 respond to 为它提供常规 HTML 路由信息 resources zones do resource
  • 获取嵌套参数

    我有一个带有嵌套参数的表单 在下面的示例中 如何获取控制器中的 amount whole 值 Parameters utf8 gt authenticity token gt KCmBI6RLh0LdUsM2r5H1vhNykS1IXecF
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 从父应用程序重新打开 Rails 3 引擎类

    就目前而言 您无法重新打开引擎中包含的引擎类 app只需在父应用程序的目录中添加相同的类即可 app目录 例如 my engine app controllers users controller rb my app app control
  • 通过 Ruby on Rails 应用程序在 Facebook Wall 上发帖的最简单方法是什么?

    上周 我成功地将 twitter 与我的 小型 rails 应用程序集成 如果我在 Rails 应用程序中创建新记录 它将发布在 Twitter 上 但我该如何用 Facebook 做到这一点呢 Twitter 真的很容易 感谢 Twitt
  • Rails 资源单数还是复数?

    我有一条搜索路线 我想将其设为单数 但是当我指定单数路线时 它仍然会生成复数控制器路线 这是应该的样子吗 resource search Gives me search POST search format action gt create

随机推荐

  • MongoDB 5.0+ 需要支持 AVX 的 CPU。容器启动失败

    我正在尝试使用 docker compose 文件在 docker 容器中运行 mongo 6 但它总是退出并出现警告 Docker 版本 23 0 4 内部版本 f480fb1 Docker compose版本 v2 17 2 docke
  • 预渲染不会保留用于捕获第二遍的变量值

    我查看了有关如何预渲染 Blazor 服务器应用程序然后分两次渲染的各种文章 我已经审查了生命周期 并且非常清楚这是预期的行为 主要是为了提供良好的性能 我不想关闭预渲染 所以在加载数据结构和类似的东西时我必须考虑它 我需要能够运行与数据库
  • PHP 中的优先运算符“OR”和“=”

    a 1 a OR a somthing echo a 1 Why If 比 OR 优先得多 那么为什么 OR 先执行呢 当您在两个语句之间放置 OR 时 如果第一个语句返回 true 则第二个语句永远不会被执行 在这种情况下 第一个语句 a
  • 使用 Nashorn JavaScript 引擎访问 ScriptContext 变量 (Java 8)

    我使用了以下代码RhinoJava 中的 JavaScript 引擎 Test public void testRhino throws ScriptException final ScriptEngineManager factory n
  • 仅使用 HTML/CSS 创建粗箭头

    有没有办法仅使用 html 和 css 创建 4 个指向上 下 左 右的粗箭头 使用 s 和边框创建箭头的主干非常容易 这是箭头头的对角线 我不知道该怎么做 我需要它在 IE7 和所有现代浏览器中工作 我使用 jQuery 并且很高兴依赖它
  • 包含关键字的 Linq 不同记录

    我需要根据汽车关键字搜索返回不同的记录列表 例如 Alfa 147 问题是 由于我有 3 辆 Alfa 汽车 它返回 1 3 条记录 似乎 1 表示 Alfa 和 147 结果 3 表示 Alfa 结果 EDIT SQL Server 查询
  • gitolite 后接收挂钩未触发

    In my gitolite rc我有的文件 LOCAL CODE gt ENV HOME gitolite local 然后在ENABLE我已启用的同一文件的部分repo specific hooks ENABLE gt COMMANDS
  • 将录制的 Twilio 音频发送到 Lex

    目前我可以录制用户输入 将录制 URL 传递给所需的函数 并在本地下载音频文件 我试图对音频文件执行的操作是获取音频文件的缓冲区以发送到 Lex 或者将其转换为 Lex 需要的格式 根据 AWS 文档 输入流参数值接受以下值 var par
  • Java:网络设置窗口

    我正在寻找一种方法来对带有点的文本字段进行编程 例如 Windows 网络设置对话框中的点 参见 gt gt https i stack imgur com gayeY jpg https i stack imgur com gayeY j
  • PrimeFaces 的惰性数据模型加载方法未调用

    我碰巧不明白为什么我的加载方法没有在我的 primefaces 表的惰性数据模型中调用 我的 xhtml 页面是这样的
  • Heroku:当我执行“heroku run console”时,我需要付费吗?

    我分别运行了三个命令 bash console and node 当我做heroku ps我明白了 heroku ps Process State Command run 1 complete for 11m console run 2 c
  • Pl/SQL 嵌套过程异常处理

    这是关于通过多个级别的 PL SQL 过程进行错误处理的最佳实践问题 我查看了其他一些问题来帮助我解决问题 特别是this one https stackoverflow com questions 7360565 pl sql excep
  • 运行spring boot原生应用程序,无法加载资源文件

    我正在尝试将 Spring Boot 应用程序编译为本机应用程序并使用 docker 运行它 我使用的是 spring graalvm native 版本 0 8 5 和 Spring Boot 版本 2 4 1 我正在尝试使用 sprin
  • aws ec2:如何从ubuntu实例内部知道公共IP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了一个 amazon web services 实例并使用 Ubuntu 14 04 amazon 机器映像 现在我可以 ssh 进
  • Notepad++ 崩溃后显示空值

    我正在 Notepad 中编辑保存的文件 不幸的是 我没有关闭 Notepad 应用程序 PC 由于电池电量耗尽而断电 当电源重新打开时 我打开我的文件 发现只有 nul nul nul nul nul 这是一个文本文件 我正在其中保存 x
  • 无法在 PowerShell 中将字符串转换为 int

    我正在尝试使用 PowerShell 将字符串转换为整数 然而 它不断告诉我 我没有有效的号码 尽管我确信我有 首先 这是我如何获取变量以及类型的打印输出等 以确保有效性 obj New Object TypeName PSCustomOb
  • 如何使用SQL Server 2008 Reporting Services的WebService

    我创建了一个报表并将其发布到 Report Server 2008 效果很好 我可以打电话http 服务器名称 81 报告在我的浏览器中查看并导出报告 我现在想做的是编写一个应用程序 使用该报告创建一个 Excel 文件 根据 Report
  • 如何根据第一个下拉列表的选择更新第二个下拉列表?

    我有两个 DropDownListFor 助手 第二个的 SelectList 取决于第一个助手中选择的值 因此 我需要做的是 当用户从第一个 DropDownListFor 帮助器中选择一个值时 必须使用正确的值更新第二个 DropDow
  • WPF Button.IsCancel 属性如何工作?

    取消按钮背后的基本思想是通过 Escape 按键关闭窗口 您可以设置 IsCancel 属性 取消按钮设置为 true 导致 取消按钮自动关闭 对话框不处理 Click 事件 来源 WPF 编程 Griffith 销售 所以这应该有效
  • Rails 3 中的类表继承

    我目前正在开发一个 Rails 3 应用程序 它看起来可能需要对几个模型使用类表继承 这是正在发生的事情的一个简化示例 我有一个名为 Person 的类 具有诸如姓名 电子邮件 密码之类的通用属性 这些属性对于应用程序中的所有类型的人来说都