多态关联

2024-02-27

如果您具有多态belongs_to关联,那么引用将添加所需的两列:

create_table :products do |t|
  t.references :attachment, :polymorphic => {:default => 'Photo'}
end

将添加一个attachment_id列和字符串attachment_type默认值为“照片”的列。

这到底是什么意思?


这是有关参考方法的文档:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938 http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938

引用方法的代码如下:

497:       def references(*args)
498:         options = args.extract_options!
499:         polymorphic = options.delete(:polymorphic)
500:         args.each do |col|
501:           column("#{col}_id", :integer, options)
502:           column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) unless polymorphic.nil?
503:         end
504:       end

如你看到的。它将 [column]_id 和 [column type 列添加到表中。

这就像说一样:

create_table :products do |t|
  t.integer :attachment_id
  t.string  :attachment_type, :default => 'Photo'
end

多态关联用于将一种对象连接到多种其他对象。

一个很好的例子可能是支持标签的应用程序,其中标签可以连接到Products and Categories.

在您的示例中,产品看起来可以附加到多种类型的对象,其中默认类型的对象是照片。 (attachment_type将是“照片”,并且attachment_id将是“照片”表中一行的 ID)

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

多态关联 的相关文章

  • 红宝石接球和效率

    catch在 Ruby 中意味着跳出深度嵌套的代码 在 Java 中 例如用Java也可以达到同样的效果try catch用于处理异常 但它被认为是糟糕的解决方案 而且效率非常低 在 Ruby 中 我们有处理异常的方法begin raise
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 如何在 Ruby 2.2 上删除不安全密码来强化 Rails+webrick+https

    更新 首先 我的测试代码没有充分显示 ruby 2 4 看到 SSLCiphers 选项 而 ruby 2 2 没有 我编辑了下面的示例代码以清楚地表明这一点 更新 由于我的问题未能得到社区的任何帮助 我继续前进 两天后找到了解决方案 我将
  • 从父应用程序重新打开 Rails 3 引擎类

    就目前而言 您无法重新打开引擎中包含的引擎类 app只需在父应用程序的目录中添加相同的类即可 app目录 例如 my engine app controllers users controller rb my app app control
  • 使用哈希参数进行 DRY Ruby 初始化

    我发现自己经常在构造函数中使用哈希参数 尤其是在为配置或最终用户将接触到的其他 API 编写 DSL 时 我最终做的是类似以下的事情 class Example PROPERTIES name age PROPERTIES each p a
  • Rails 安全:完全避免大规模分配

    我倾向于不需要批量分配 http guides rubyonrails org security html mass assignment我的生产代码中的功能 在我的测试代码中 我经常使用它 但在这些情况下我do想要设置任意列 因此 如果在
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https
  • 使用 ruby​​ 调整动画 GIF 图像的大小?

    我正在尝试将 GIF 图像调整为不同的尺寸 我在 ruby 中使用 RMagick 库 但对于某些 gif 图像 即使我缩小 GIF 的大小 文件大小似乎也会增加 我正在以相同的纵横比调整图像图像的大小 这是我的代码 require rma
  • Watir Webdriver 加载 Chrome 扩展

    我正在尝试使用 Watir 加载 chrome 扩展 但遇到了问题 我发现这个相关问题 能够启动带有 watir webdriver 加载扩展的 chrome https stackoverflow com questions 125867
  • 带有 git Remote 的 Gem 文件在 Heroku 推送上失败

    我的 gemfile 中有以下行 gem client side validations git gt email protected cdn cgi l email protection Dakuan client side valida
  • 子文件夹和关系中的 Rails 模型

    我在自动加载的文件夹中组织了一些轨道模型 config autoload paths Dir Rails root join app models 我可以直接使用所有模型 例如Image first file name 但是当我尝试通过关系
  • 嵌套 has_one 关联的强参数

    我似乎遗漏了一些明显的东西 但我无法允许嵌套的属性has one协会 控制器 def create crossword Crossword new crossword params if crossword save render show
  • 比较 rspec 自定义 ActiveRecord::RecordInvalid 错误消息

    模型中有以下内容 validates uniqueness of title if proc item item item type tag case sensitive false message I18n t errors key va
  • MySQL正则表达式:如何将字符串中的数字与\d匹配?

    我有一个专栏release date它以字符串格式存储日期 不是 DATETIME 格式 因为它们有时可以是任何其他字符串文字 我想根据给定的月份和年份查找任意日期的所有记录 尝试遵循但对我不起作用 gt Post find all con
  • 如何声明依赖于参数化任务的 Rake 任务?

    我见过一些任务具有参数和依赖项任务的示例 例如 task name first name last name gt pre name do t args args with defaults first name gt John last
  • Ruby on Rails - 运行 Cucumber 时出错:您已经激活了 activesupport 3.2.1,但您的 Gemfile 需要 activesupport 3.1.0。

    我知道这个问题之前已经以一种或另一种形式被问过 但我仍然无法为此找到可行的解决方案 我正在学习在线提供的 saas 课程 代码是直接从https github com saasbook hw3 rottenpotatoes https gi
  • Travis-CI 上的 Rails 数据库设置

    我正在尝试在 Rails 项目上使用 Travis 持续集成 文档说 对于 SQLite3 测试数据库必须配置如下 test adapter sqlite3 database memory timeout 500 但我想保留本地测试的默认配
  • 在 Rails 中本地化嵌套虚拟属性

    怎么可能本地化嵌套虚拟属性在 Rails 中 该模型 class User lt ActiveRecord Base attr accessor company information This is used in callbacks e
  • 如何准确地衡量加载模型所需的时间?

    我想对加载模块 find by id 234 调用 所需的时间进行基准测试 另外 我如何跟踪加载页面所需的时间 我知道我在运行 Rails 服务器时得到此信息 但这是在调试模式下 我想要生产速度基准 可能吗 为了快速检查 我强烈建议检查基准
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相

随机推荐

  • 通过IdHTTP读取并保存部分文件流

    我想通过文件流从 HTTP 服务器下载文件 并且只读取 并保存到文件 前几行 例如 100 行 读取前 100 行后 文件流必须结束 所以我不想下载或阅读整个文件 您可以在下面找到我到目前为止所拥有的内容 该网站只是一个例子 有人可以引导我
  • 使用numpy.数字或替代数组上的binary_repr - Python

    使用以下代码我尝试将数字列表转换为二进制数但出现错误 import numpy as np lis np array 1 2 3 4 5 6 7 8 9 a np binary repr lis width 32 运行程序后的错误是 回溯
  • r 包插入符号-使用并行时打印迭代

    无论如何 我们可以在使用时打印迭代caret train并行功能 我知道有一个名为 verbose 的选项 但如果我使用多核 它似乎不会打印任何内容 我找到了解决方案 我们需要的只是通过 makeCluster 函数注册核心 library
  • C# 中的 System.Threading.Timer 似乎不起作用。每3秒运行速度非常快

    我有一个计时器对象 我希望它每分钟运行一次 具体来说 它应该运行一个OnCallBack方法并在 a 时变得不活动OnCallBack方法正在运行 一旦OnCallBack方法完成后 它 aOnCallBack 重新启动计时器 这是我现在所
  • 如何在cmake中使用调试符号构建依赖共享库?

    我的代码是这样组织的 cpp main cpp 从调用代码dataStructures and common CMakeLists txt topmostCMakeLists 文件 build common CMakeLists txt 应
  • Android Java - 创建 Cronjob

    我想要制作一个在后端运行的 Cronjob 并启动一个方法 30 分钟 如果函数返回 true 或其他 Cronjob 将创建一个状态栏通知 在 Android 中这可能吗 如果是的话 用哪个函数 非常感谢 安卓系统报警管理器 http d
  • 如何让 CreateProcess/CreateProcessW 在路径 > MAX_PATH 字符中执行进程

    我试图让 CreateProcess 或 CreateProcessW 执行名称 http msdn microsoft com en us library ms682425 aspx http msdn microsoft com en
  • 限制可排序的容器/父级

    好的 我又来了 和 RubaXa 一起玩Sortable http rubaxa github io Sortable 插件 希望他就在这附近 因为这个插件相当复杂 一些发现 我花了一些时间才完全理解这个机制 但我认为我是对的 Case 1
  • Windows 命令提示符中的别名

    我已经添加了notepad exe到我的环境变量中的路径 现在在命令提示符下 notepad exe filename txt打开filename txt 但我想做的只是np filename txt打开文件 我尝试使用DOSKEY np
  • intel avx2 中是否有 movemask 指令的逆指令?

    movemask 指令采用 m256i 并返回 int32 其中每个位 前 4 8 或所有 32 位 具体取决于输入向量元素类型 是相应向量元素的最高有效位 我想做相反的事情 取 32 其中只有 4 8 或 32 个最低有效位有意义 并获得
  • 冒泡排序有什么用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何自定义App Designer人物的背景?

    我想附加徽标或更改应用程序设计器的整个背景uifigure 如何才能做到这一点 如果你想设置一个整个图的纯色背景色 那里存在有记录的方式 https www mathworks com help matlab ref uifigureapp
  • 验证在部分视图中不起作用

    我有一个索引页面 其中有两个部分视图 登录和注册 我正在使用数据模型验证 登录 cshtml model Project ViewModel UserModel div using Html BeginForm Login account
  • 从 Ada 访问 c 常量

    我有一个带有这样类型定义的头文件 ifndef SETSIZE define SETSIZE 32 endif typedef struct set unsigned array SETSIZE set t 要使用相应的 C 函数 我需要在
  • jquery 获取之前输入的文本

    我有以下 html div class active string div
  • 将大文件作为流发送到 process.getOutputStream

    我在 Windows 机器中使用 gzip 实用程序 我压缩了一个文件并作为 blob 存储在数据库中 当我想使用 gzip 实用程序解压缩此文件时 我将此字节流写入 process getOutputStream 但超过30KB后 就无法
  • Android 绘制点

    如何用画布绘制完整的圆或点 我使用画布和路径 绘画类 my code Override public boolean onTouchEvent MotionEvent event float eventX event getX float
  • 如何向谷歌图表中的图例添加工具提示

    使用最新版本的 Google Charts API 我有一个简单的条形图 我想在将鼠标悬停在图例中的元素上时显示一个工具提示 解释图例中的每个项目是什么 我仍然希望栏上的工具提示保持不变并显示其标签和值
  • 使用 GSM 调制解调器接收短信

    我读到 GSM 调制解调器每分钟最多只能接收 30 条短信 如果您需要收到更多 您会怎么做 还有其他技术吗 我认为您可能想要与列出的答案不同的东西构建短信服务器的最佳实践是什么 https stackoverflow com questio
  • 多态关联

    如果您具有多态belongs to关联 那么引用将添加所需的两列 create table products do t t references attachment polymorphic gt default gt Photo end