使用特定语法序列化ActiveRecord中的自定义类

巴恩斯

我有一个自定义的Interval类,我想在一些不同的ActiveRecord模型中使用。目前,我将间隔存储为具有特定语法的字符串(带有用于强制格式化的自定义验证器),并且在需要访问Interval方法时随时创建一个新对象。

我需要添加什么到ActiveRecord模型/ Interval类中,才能将间隔用作对象而不是字符串,同时仍使用特定语法将间隔存储在数据库中?

希望这是有道理的,但如果没有希望的话,下面的示例将使您解决问题。

ActiveRecord类当前看起来像:

class MyClass < ActiveRecord::Base
  validates :interval, allow_blank: true, interval: true   # custom validator
  ...

为了做任何有用的事情,我创建了一个新的间隔:

def some_helper
  ...
  interval_object = Interval.new(@my_class.interval)   # @my_class.interval is just a string with specific syntax
  if interval_object.useful?                           # 'useful' method
  ...

但我想这样做:

def some_helper
  ...
  if @my_class.interval.useful?   # 'useful' method
  ...

初始化期望的时间间隔语法:

3:day  # represents every 3 days
1:week # represents every week

这似乎应该有一个简单的解决方案,但我似乎找不到正确的措词。

亩太短

您应该能够重写accessor和mutator方法来完成需要做的事情:

def interval
  Interval.new(super)
end

def interval=(i)
  # Or whatever needs to be done to convert `i` back to a string,
  # keep in mind that `i` might be a string already.
  super(i.to_s)
end

然后,您可以说出以下内容:

@my_class.interval.useful?
@my_class.interval = some_interval_object
@my_class.interval = some_string_that_looks_right
@my_class.update_attributes(:interval => some_interval_object)
@my_class.update_attributes(:interval => some_string_that_looks_right)

正确的事情应该发生。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 GSON 序列化自定义类

使用自定义设置提供程序序列化自定义类

是否可以使用我的自定义序列化或使用Externalization来序列化类的瞬态字段?

List 类的自定义 KotlinX 序列化程序

反序列化:从自定义类获取数据

类的自定义序列化失败

自定义gson序列化抽象类

自定义类的对象列表的json序列化

JSON Jackson-使用自定义序列化程序序列化多态类时的异常

使用YamlDotNEt和C#中的自定义类型类反序列化嵌套的YAML

防止特定字段的自定义序列化

使用GSON使用自定义比较器反序列化扩展TreeSet的类

支持嵌套类型中自定义类的默认序列化

在自定义Java AWS应用程序中找不到类的序列化程序

从包中存储和检索自定义可序列化类的 ArrayList

NSMutableArray的自定义类对象的序列化和反序列化

如何为父类和子类使用单独的自定义json序列化程序?

GSON 无法使用自定义 getter 反序列化 Kotlin 类

如何使用Import-CliXml反序列化自定义类对象的通用列表?

使用Codable序列化包含引用循环的自定义类

在PyYAML中使用自定义类密钥对字典进行反序列化失败

是否可以使用特定于端点的自定义 JSON 序列化程序?

在动态中自定义json序列化

序列化json对象中的自定义对象

序列化DRF中的自定义相关字段

ServiceStack中的自定义JSON序列化

使用JaxRS自定义JSON序列化

使用Jackson序列化自定义地图

使用自定义IXmlSerializer反序列化注释