- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个代表上课日的 SchoolDay
类:它可以告诉您日期、学期、学期、星期和星期几。它可以生成类似“Sem1 13A Fri”的字符串。为了将这些对象存储在数据库中,我希望将它们序列化为字符串。
这是我的 DataMapper 自定义类型代码。我从 dm-types 中的代码中提取了一些想法,因为(令人失望的是)没有用于创建自定义类型的真实文档。抱歉,太长了。
module DataMapper
class Property
class SchoolDay < DataMapper::Property::String
#load_as ::SchoolRecord::DomainObjects::SchoolDay
# Commented out: the 'load_as' method is not found
def load(value)
# Take a string from the database and load it. We need a calendar!
val = case value
when ::String then calendar.schoolday(value)
when ::SR::DO::SchoolDay then value
else
# fail
end
end
def dump(value)
# Store a SchoolDay value into the database as a string.
case value
when SR::DO::SchoolDay
sd = value
"Sem#{sd.semester} #{sd.weekstr} #{sd.day}"
when ::String
value
else
# fail
end
end
def typecast(value)
# I don't know what this is supposed to do -- that is, when and why it
# is called -- but I am aping the behaviour of the Regexp custom type,
# which, like this one, stores as a String and loads as something else.
load(value)
end
# private methods calendar() and error_message() omitted
end
end
end
此代码适用于从 (SQLite) 数据库读取,但不适用于创建新行。错误信息是:
Schoolday must be of type String
定义 DataMapper 资源并尝试创建记录的代码是:
class LessonDescription
include DataMapper::Resource
property :id, Serial
property :schoolday, SchoolDay # "Sem1 3A Fri"
property :class_label, String # "10"
property :period, Integer # (0..6), 0 being before school
property :description, Text # "Completed yesterday's worksheet. hw:(4-07)"
end
# ...
ld = LessonDescription.create(
schoolday: @schoolday,
class_label: @class_label,
period: @period,
description: description
)
这是 dm-types 库中 Regexp 数据映射器类型的代码。就这么简单!
module DataMapper
class Property
class Regexp < String
load_as ::Regexp # NOTE THIS LINE
def load(value)
::Regexp.new(value) unless value.nil?
end
def dump(value)
value.source unless value.nil?
end
def typecast(value)
load(value)
end
end
end
end
出于某种原因,我无法在我的代码中使用 load_as
行。
总结一下:我正在尝试创建一个在 SchoolDay(域对象)和 String(数据库表示)之间进行转换的自定义类型。翻译很简单,我主要从 DataMapper Regexp 类型复制了代码结构。但是当我试图保存一个 SchoolDay 时,它提示说我没有给它一个字符串。令人沮丧的是,我不能使用内置和自定义类型 all 使用的“load_as”方法,即使我有最新的 gem。我也找不到在 DataMapper 的源代码中任何地方定义的“load_as”方法。但是它叫!
抱歉太长了。非常感谢任何帮助,以及指向创建这些我不知何故错过的东西的指南的指针。
最佳答案
github 上 dm-types 的当前代码似乎还没有发布到任何官方版本——这就是 load_as
在您的示例中不起作用的原因。但是尝试添加这个方法:
module DataMapper
class Property
class SchoolDay < DataMapper::Property::String
def custom?
true
end
end
end
end
这在这里起作用。
关于ruby - 如何让 (Ruby) DataMapper 自定义类型工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9481513/
我正在阅读 Zend Framework 快速入门教程,在他们的演示代码中,他们使用了一个数据映射器,该映射器使用 Zend_DB_Table 来访问数据库(参见:http://framework.z
到目前为止,我一直在所有c#数据库驱动的应用程序中使用Active记录。但是现在我的应用程序需要将我的持久性代码与业务对象分开。我已经阅读了很多有关Martin Fowler的数据映射模式的文章,但是
我读过很多有关 DataMapper 模式的内容。 据我所知,DataMapper 应该将表单模型对象映射到实体对象。因此被用作某种适配器。 我理解正确吗? 最佳答案 不,Data Mapper是关于
我正在尝试使用新的 DataMapper 模型映射遗留 MySQL 数据库。 MySQL 模式: CREATE TABLE IF NOT EXISTS `backer` ( `backer_id`
我有一个带有几个字段和唯一约束的数据映射器对象。实际上,这确保了每个用户 ID 每个日期代码只能创建一条记录。 class Form include Datamapper::Resource
问题是我无法将列类型更改为“文本” 这是我看到的错误: DarkBook:playground Justin$ rake migrate_up (in/Users/Justin/Dropbox/Bus
我只是希望以随机顺序返回 DataMapper 记录。 这是我的模型(使用 DataMapper 和 sqlite3 数据库): class Movie include DataMapper::R
我在以下代码中遇到关联问题。 我遇到的错误是对最后一行代码的评论。 编辑:我简化了代码... require 'rubygems' require 'data_mapper' # requires a
我正在使用 Ruby/Sinatra 和 Datamapper 编写网络应用程序。我有一些表,我想将数据预加载到其中。有没有最佳实践?例如。我有一个名为 references 的表 id name u
我正在使用带有 DataMapper MySql 数据库的简单 Sinatra 网络应用程序。我声明了一个具有属性的 Datamapper Post 类 property :created_at, D
我有以下模型 class TagType include DataMapper::Resource ## Relationships belongs_to :category has
我正在使用 Ruby 中的 Sinatra 和 Datamapper 编写一个简单的应用程序,但我遇到了一个问题 — 当我尝试将数据保存到我的 SQLite 数据库时,没有任何变化。但是当我尝试安装数
我有一张产品表,其中包含 SKU、名称等属性。 似乎我需要为每个类别的产品创建单独的表格,因为类别的功能种类繁多。 假设我有一张放 Boot 、工具和帽子的 table /类 我想(除非有更好的方法)
我正在用 PHP 编写一个必须写入三个持久层的系统: 一个网络服务 两个数据库(一个mysql一个mssql) 这是遗留系统的原因,无法更改。 我想使用 DataMapper 模式,并且我正在尝试建立
我有一个这样的数据库模式 DataMapper.setup :default, "sqlite://#{Dir.pwd}/image.db" class Image include DataM
我有两个看起来像这样的模型 class Stage include DataMapper::Resource property :id, Serial belongs_to :
使用以下模型,我正在寻找一种高效且直接的方法来返回所有具有 0 个父任务(本质上是顶级任务)的任务。我最终也想返回 0 个子任务之类的东西,所以一个通用的解决方案会很好。这是否可以使用现有的 Data
我目前正在开发一个基于现有数据库的新应用程序,使用 DataMapper 进行数据访问。但是,它在处理外键时的约定不是数据库使用的约定。 例子: class Invoice include Dat
谁能给我解释一下这是怎么回事吗? 这是我放在一起向大家展示的示例: class Person include DataMapper::Resource property :id, Serial
class Alpha include DataMapper::Resource property :id, Serial property :name, String has n
我是一名优秀的程序员,十分优秀!