问题标签 [datamapper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
564 浏览

php - 一个简单模型可以扩展 Zend_Db_Row(本质上是 Active Record)吗?

我知道领域模型和数据映射器是 OOP 势利小人的选择(以互补的方式使用“势利小人”,正如 Martin Fowler 自称的那样)——然而,即使是 Fowler在 POEAA 中也说

“对于不太复杂的领域逻辑,Active Record 是一个不错的选择……”

我有一个简单的产品和发票域模型,没有太多要建模的表/对象/概念,而且关系也没有那么复杂。那么,这对 Active Record 来说是一个很好的用例吗?

Fowler 还指出,Active Record 类似于 Row Data Gateway,不同之处在于 Active Record 具有域逻辑。

假设这是一个有效的 Active Record 用例,并且由于 Zend 提供 Row Data Gateway,扩展这些对象的智能(而不是简单地添加表名)解决方案似乎是使用 Zend 框架创建 Active Record 对象的好方法. 事实上,这个概念在这个 SO answer 中讨论过这是在 Zend 框架内实现 Active Record 的一种可接受的方式吗?

当然,这个问题最流行的答案是Bill Karwin(他曾参与 Zend 的 Db 实现)的一个答案,他建议不要使用Zend_Db_TableZend_Db_Row以这种方式(至少我是这么读的)。

如果有问题的域模型变得更加复杂,我完全接受想要迁移到 Data Mapper 解决方案。我查看了各种 ORM/DataMappers(不仅仅是所讨论的域模型,最近还阅读了有关 OOP 设计模式的更多内容),对于某些事情来说,它们似乎真的太多了。

0 投票
1 回答
851 浏览

ruby - 从 Datamapper 开始,关联问题

我只是深入研究 Datamapper(和 Sinatra),并有一个关于关联的问题。下面是我的一些模型。这就是我想要实现的。我对锻炼项目和锻炼有疑问。锻炼将单独管理,但锻炼项目有一个与每一行关联的锻炼。

  1. 锻炼 - 只是锻炼类型的列表(跑步、举重、仰卧起坐等)
  2. 选定的锻炼 - 这是一组锻炼的名称,以及用户和培训师的注释。它有 N 个锻炼项目的集合
  3. 锻炼项目 - 这需要进行锻炼并在锻炼集中进行多次重复。

    /li>
0 投票
3 回答
330 浏览

nhibernate - 将 ORM 与没有定义关系的数据库一起使用?

考虑一个由 100 多个表组成的数据库(MSSQL 2005),这些表在一​​定程度上定义了主键。表之间存在“关系”,但是这些不是通过外键约束来强制执行的。

考虑以下我正在处理的典型表格类型的简化示例。User 与 City 和 Province 表之间有明确的关系。但是,它们的关键问题是表中的数据类型和命名约定不一致。

我正在考虑重写使用此数据源的应用程序(在 ASP.net MVC 中),因为它的设计类似于MVC 店面。但是,我正在经历概念验证阶段,这是我遇到的绊脚石之一。

  1. 就可以轻松使用的 ORM 选择而言,我有哪些选择,为什么?

  2. 我什至应该考虑 ORM 吗?(我问这个的原因是大多数解释和教程都适用于设计相对干净的现有数据库,或者与我相比是新创建的数据库。因此,我很难找到解决这个问题的方法)

  3. 有大量现有的 SQL 查询,数据映射器(例如 IBatis.net)是否更合适,因为我们可以轻松地修改它们以使其工作并重用已经进行的投资?

我在 SO 上发现了这个问题,它向我表明可以使用 ORM - 但是我觉得这是一个映射问题?

注意:目前,对象模型没有明确定义,因为它不存在。现有系统几乎用 SQL 完成几乎所有事情,或者由过于复杂和大量查询组成以完成功能。我几乎是一个菜鸟,并且在 ORM 和 MVC 方面的经验为零 - 所以这是一个很棒的学习曲线。

0 投票
1 回答
777 浏览

ruby - 内存数据库中的数据映射器

使用内存数据库中的 Sqlite3 设置Datamapper很容易:DataMapper.setup :default, 'sqlite3::memory:'。

但是,在测试时,我想在每次测试后销毁整个内存数据库,而不是调用自动迁移!作为放弃一切的捷径。是否可以?或者将默认存储库设置为 nil 并让垃圾收集器处理它就足够了吗?

0 投票
3 回答
570 浏览

ruby-on-rails - 如何在 appengine 上迁移 Datamapper

我已经改变了我的模型

我刚刚添加了“属性:trail_count,整数,:default => 0”

我想迁移现有的 appengine 表以获得额外的字段“trail_count”,我已经阅读了 DataMapper.auto_upgrade!应该这样做。

但我得到一个错误“未定义的方法`auto_upgrade!' 对于 DataMapper:模块"

你能帮忙我如何迁移 DM 模型?

0 投票
1 回答
332 浏览

ruby-on-rails - 将现有 ROR 应用程序迁移到 GAE

我已经设法在 App Engine 上运行了一个基本的 rails app1:http: //gist.github.com/268192

所以,在我的基本 app2 上,我安装了 CE,它在本地机器上运行良好。(communityengine.org)

但是,当我在我的实际 app2 上执行相同的步骤时,其中安装了 community_engine 插件并且所有 gem 都被冻结,应用程序引擎安装程序脚本要求覆盖各种文件,如 boot.rb、routes.rb,我没有不允许。

因此,正如预期的那样,当我将 rails + ce 应用程序发布到 GAE 时,它没有发布,并且它还拧紧了 app2 上 CE 的本地安装。

所以,问题很明显,CE 使用 ActiveRecord,而 GAE 使用 DataMapper。

所以,我的问题也可以改写为:我们可以将使用 Active Record 的现有 ROR 应用程序迁移到使用 DataMapper 的 GAE 吗?

PS:这是我关于 ROR 和 GAE 的第一个项目。

0 投票
2 回答
1028 浏览

ruby-on-rails - DataMapper:使用 auto_migrate!具有多对多依赖关系?

我正在尝试使用 Rails3-pre 和最新的 DataMapper 将我的应用程序从 MySql 迁移到 Postgresql。

我有几个模型,它们使用 :through => Resource 通过多对多关系关联,这意味着 DataMapper 为这两个模型创建了一个带有外键的连接表。我不能自动迁移!这些变化,因为我不断得到这个:

我已经尝试了所有我能想到的东西,并且认为当我添加 :constraint => :skip 到字段定义时我的工作正常,但是当我尝试运行 auto_migrate 时,我不断收到该错误。我认为 :skip 意味着它会忽略家属,但也许这只适用于删除行而不是删除表?

我应该提一下,在我对数据库进行一次核对之后,我可以运行 auto_migrate,但在那之后,就会出现错误。

任何建议或意见都非常感谢。

编辑:datamapper irc 上的 Gibheer 建议改用 auto_upgrade - 它不会尝试重新创建表。

0 投票
1 回答
505 浏览

ruby - ruby/datamapper:将类方法重构为模块

我有以下代码,并尝试了一整天将类方法重构为一个单独的模块,以与我的所有模型类共享功能。

代码(http://pastie.org/974847):

我想归档类似的内容:

但不幸的是,我的红宝石技能太差了。我读了很多东西(例如这里),现在我更加困惑了。我偶然发现了以下两点:

  1. alias_method将失败,因为它将在DataMapper::Resource模块中动态定义。
  2. 如何获得allowed_properties包含模块的类方法?

红宝石的方法是什么?

提前谢谢了。

0 投票
1 回答
930 浏览

postgresql - Heroku 上的 Sinatra/Haml/DataMapper 出现 Postgres 错误

我正在尝试将一个简单的 Sinatra 应用程序移至 Heroku。使用 Taps 迁移 Ruby 应用程序代码和现有 MySQL 数据库进展顺利,但我收到以下 Postgres 错误:

PostgresError - 错误:运算符不存在:text = integer LINE 1: ...d_at", "post_id" FROM "comments" WHERE ("post_id" IN (4, 17,... ^ 提示:没有运算符匹配给定名称和参数类型。您可能需要添加显式类型转换。

很明显,该问题与查询中的类型不匹配有关,但这是由 DataMapper ORM 以非常高的抽象级别从 Haml 模板发出的,所以我不确定如何控制它...

具体来说,这似乎是p.comments从我的 Haml 模板中调用的,其中p表示给定的帖子。

Datamapper模型相关如下:

这在我使用 MySQL 的本地和当前托管环境中运行良好,但 Postgres 显然更严格。

必须有数百个 Datamapper 和 Haml 应用程序在 Postgres DB 上运行,并且这种模型关系是超常规的,所以希望有人已经看到(并确定如何解决)这个问题。谢谢!

更新:请参阅Heroku:从 MySQL 迁移数据库后的 Postgres 类型运算符错误以进行解决。

0 投票
2 回答
1114 浏览

postgresql - Heroku:从 MySQL 迁移数据库后 Postgres 类型运算符错误

这是我之前提出的一个问题的后续,该问题将其表述为更多的编程问题而不是数据库问题。

Heroku 上的 Sinatra/Haml/DataMapper 出现 Postgres 错误

我相信问题已经被隔离到 Heroku 的 Postgres 数据库中 ID 列在运行后的存储中db:push

简而言之,我的应用程序在我的原始 MySQL 数据库上正常运行,但在对 ID 列执行任何查询时在 Heroku 上引发 Postgres 错误,这似乎已作为 TEXT 存储在 Postgres 中,即使它在 MySQL 中存储为 INT。我的问题是为什么在 Postgres 中将 ID 列创建为 INT 以将数据传输到 Heroku,以及我是否有任何方法可以防止这种情况发生。

heroku console这是演示该问题的会话的输出:

谢谢!