Ruby Datamapper 表继承与关联

2024-02-12

我开始学习数据映射器 http://datamapper.org/我喜欢它的是我可以用真正的继承来编写我的模型。

现在我想知道是否可以对此进行更高级:

class Event
  include DataMapper::Resource
  property :id, Serial
  property :begin, DateTime
  property :type, Discriminator
end

class Talk<Event
  property :title, String
  belongs_to :meeting
end

class Meeting<Event
  has n, :talks
end

该代码无法创建:title列为Talk显然,鉴别器列在这里没有什么价值,因为从数据库视图来看,两者都应该有单独的表Talk and Meeting.

所以,最后,我想要Talk and Meeting共享与定义相同的属性Event但具有可能的附加属性和 0..1:n 关系(会议可以进行多次会谈,但也有没有会议的会谈。)有没有办法在不重复列定义和/或放弃继承的情况下完成此任务?

Edit

再举一个例子:关于继承,我喜欢的部分是,一般性的Events可以单独查询。所以,当我想知道,是否有某个特定的东西:begin日期,我不需要查看两个或多个表,而只需查询Event桌子。在某种程度上,以下结构可以满足我的需求。

class Event
  include DataMapper::Resource
  property :id, Serial
  property :begin, DateTime
end

class Talk
  include DataMapper::Resource
  property :id, Serial
  property :title, String
  belongs_to :event
  belongs_to :meeting
end

class Meeting
  include DataMapper::Resource
  property :id, Serial
  belongs_to :event
  has n, :talks
end

但是,为了使用它,我需要手动创建一个Event每次,我都想创建或编辑一个Talk。也就是说,我做不到talk.begin or Talk.create(:begin => Time.now)。有没有办法解决这个问题而不修补所有功能并合并属性?我不想在使用模型时被提醒底层结构。


如果您想将 Event 的属性复制到 Talk 和 Meeting 中,那么您可以将其移动到模块中:

module EventFields
  def self.included(base)
    base.class_eval do
      include DataMapper::Resource
      property :id, DataMapper::Types::Serial
      property :begin, DateTime 
      # other fields here
    end
  end
end

class Talk
  include EventFields
  property :title, String
  belongs_to :meeting
end

class Meeting
  include EventFields
  has n, :talks
end

这将为您提供不同的表,但意味着减少重复。

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

Ruby Datamapper 表继承与关联 的相关文章

随机推荐

  • Bitset 作为函数的返回值

    我想要一个接口 其函数返回一个位集 class IMyInterface public virtual std bitset lt 100 gt GetBits 0 问题是我不想强制大小bitset 所以我想我必须使用boost dynam
  • Ruby 2.0 字节码导出/导入

    我一直在读关于红宝石 2 0 新功能 http www rubyinside com ruby 2 0 implementation work begins what is ruby 2 0 and whats new 5515 html
  • 使用 JavaScript 创建 Base64 编码图像

    由于图像是数据 我们可以将代码编写为 img src alt Red dot 现在我的观点是 我们可以使用 javascript 创建 base64 数据吗 有什么框架吗 我的实际要求是我有一个像 Cow 这样的字符串 我希望它作为图像 注
  • Java 最终抽象类

    我有一个非常简单的问题 我想要一个 Java 类 它提供一个公共静态方法 该方法可以执行某些操作 这只是为了封装目的 将所有重要的内容都放在一个单独的类中 这个类既不应该被实例化 也不应该被扩展 这让我写道 final abstract c
  • 打开软键盘时,DialogFragment 始终会调整大小

    我在全屏显示的自定义 DialogFragment 方面遇到一些问题 该对话框包含可滚动的内容并具有自动完成文本视图 最初 对话框在顶部显示有边距 以编程方式设置为布局内容顶部的透明视图 一旦 autocompletetextview 获得
  • Android-如何区分 Galaxy S-3 和 Galaxy S-4 布局?

    我在区分三星 Galaxy s4 和三星 Galaxy s3 的布局文件夹时遇到问题 我尝试过layout sw360dp layout sw360dp xxhdpi layout sw360dp xhdpi等 一直以来 galaxy s4
  • 是否可以在 iCal.net 上使用 UTC 偏移量代替时区名称?

    我的应用程序将 UTC 偏移量存储在用户配置文件上 例如 03 00 并且正如 iCal net Wiki 中的此页面提到的那样 我似乎只能使用时区来分配给事件 https github com rianjs ical net wiki W
  • 在 Chrome 中单击并拖动光标

    我正在开发一个网络应用程序 我需要覆盖一些默认光标 在 Chrome 中 当我单击然后拖动它时 它总是将光标更改为文本选择 我似乎找不到任何方法来覆盖它 我正在使用jquery 通常的 document css cursor default
  • fifo - 循环读取

    我想用os mkfifo http docs python org 2 library os html os mkfifo用于程序之间的简单通信 我在循环读取 fifo 时遇到问题 考虑这个玩具示例 其中我有一个读取器和一个写入器使用 fi
  • 获取中间层(Functional API)的输出并在SubClassed API中使用

    In the 喀拉斯文档 https keras io getting started faq 它说如果我们想选择中间层模型的输出 顺序和功能 我们需要做的如下 model create the original model layer n
  • 如何“git pull”同时忽略本地更改?

    有没有办法做一个git pull忽略任何本地文件更改 而无需清除目录并执行git clone 如果您的意思是希望拉动覆盖本地更改 就像工作树是干净的一样进行合并 那么 清理工作树 git reset hard git pull 如果有未跟踪
  • 为什么 Celery 守护进程看不到任务?

    我有一个在 Debian 7 8 上运行的 Django 1 62 应用程序 其中 Nginx 1 2 1 作为我的代理服务器 Gunicorn 19 1 1 作为我的应用程序服务器 我安装了 Celery 3 1 7 和 RabbitMQ
  • MongoDB:如何在 C++ 中将二进制数组存储在 BSON 中? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 使用 C 驱动程序将二进制数组添加到
  • 仅替换多个新行

    我正在尝试做一些不寻常的事情 我想用两条新行替换多条新行 类似的问题还有很多 但不完全是 请参阅 Hello n n nWorld n n n n 应该成为 Hello n nWorld n n 然而这 Hello nWorld n 应该保
  • 当我每次启动 Desktop Rstudio 时,都会收到一条错误消息:rstudio error yaml.load readlin con errorlevel errorlevel

    登录Desktop Rstudio后 会出现以下消息 Error in yaml load readLines con error label error label object C unserialize from yaml not f
  • 使用 xUnit 引用作为 NuGet 包部署项目

    我有一个包含一些类的库 我在几个单元测试项目中需要这些类 该库应作为 NuGet 包部署在我的私有存储库中 我已经在那里部署了一些 NuGet 包 所以我知道我必须做什么 但是 在这个库中我需要引用 xUnit 一旦我添加此引用 执行时就不
  • 安装 portmidi 库

    我正在尝试安装 portmidi 库 http sourceforge net apps trac portmedia wiki Installing 20 portmidi 20on 20 Linux http sourceforge n
  • Java“对compareTo(T)作为原始类型java.lang.Comparable的成员进行未经检查的调用”

    我正在尝试用 Java 来实现一个排序列表作为一个简单的练习 为了使其通用 我有一个add Comparable obj 所以我可以将它与任何实现 Comparable 接口的类一起使用 但是 当我使用obj compareTo 我得到的代
  • Visual Studio Git 工具,找不到页面,Visual Studio 2013.1

    我刚刚在 git 扩展的 vs 工具中遇到了一个奇怪的错误 当按下更改时 我收到以下错误 找不到页面 b38f4abc 2b2c 4e4d a047 eaaca7514610 我在ms上遇到过这个页面 http visualstudioga
  • Ruby Datamapper 表继承与关联

    我开始学习数据映射器 http datamapper org 我喜欢它的是我可以用真正的继承来编写我的模型 现在我想知道是否可以对此进行更高级 class Event include DataMapper Resource property