mysql - DataMapper 枚举字段在保存或更新时不会保留

标签 mysql ruby database ruby-datamapper enumerated-types

我正在尝试使用新的 DataMapper 模型映射遗留 MySQL 数据库。

MySQL 模式:

CREATE TABLE IF NOT EXISTS `backer` (
  `backer_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `secret` varchar(16) NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `status` enum('pending','ready') NOT NULL DEFAULT 'pending',  # relevant bit
  PRIMARY KEY (`backer_id`),
  UNIQUE KEY `backer_id` (`secret`),
  KEY `email` (`email`,`status`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8166 ;

DataMapper 模型:

class Backer
  include DataMapper::Resource
  storage_names[:default] = "backer"     

  property :id,      Serial, :field => "backer_id"
  property :secret,  String, :field => "secret"
  property :email,   String, :field => "email"
  property :status,  Enum[ :pending, :ready ], :field => "status", :default => "pending"
  has n, :items, :child_key => "backer_id"
end

DataMapper.finalize

对于大多数属性,我可以坚持:

b = Backer.first
b.first_name = "Daniel"
b.save!
# Backer.first.first_name == "Daniel"

它一直很好。 但是,当我使用 enum 执行此操作时:

b = Backer.first
b.status = :pending
b.save!

# b.status == :pending
# Backer.first.status != :pending
# Backer.first.update!(:status => :pending) ... 

更新/保存到 enum 字段似乎不会保留它。

SQL 通常看起来像:

1.9.3p327 :019 > Backer.last.update(:status => :ready)
 ~ (0.000349) SELECT `backer_id`, `secret`, `email`, `status` FROM `backer` ORDER BY `backer_id` DESC LIMIT 1
 ~ (0.000190) UPDATE `backer` SET `status` = 2 WHERE `backer_id` = 8166
 => true

但是当我查看对象(例如 Backer.last)时,status 没有改变。

更新

我已经验证了 MySQL 数据库中枚举的 status 字段正在持久化。但是,DataMapper 类中枚举的 status 属性根本没有反射(reflect)这一点(始终为 nil)。

这里发生了什么?

最佳答案

谢谢@morbusg:这是一个解决方案。

另一个是将我这边的 Enum 更改为 String,这对我的目的来说效果很好。

关于mysql - DataMapper 枚举字段在保存或更新时不会保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14701463/

相关文章:

mysql - 选择不同的时间戳作为 DD/MM/YYYY mysql

mysql - 如何运行数据库 :setup in Capistrano 3 and Rails 4

javascript - 使用 Rails 5 的谷歌分析不工作

asp.net - 将网站连接到不同服务器上的数据库

mysql - SSRS多个数据库源要加入

mysql - 使用 COUNT 返回不同的结果

javascript - 如何删除一个json元素?

Mysql触发器不起作用

ruby - 使用 Ruby 抓取使用 Javascript 加载的数据的 URL

java - Flyway——不复制sql资源