【问题标题】:determine if attribute has been serialized rails确定属性是否已序列化 rails
【发布时间】:2016-08-04 04:52:51
【问题描述】:

我有一个 rails 3.2 应用程序,它有一个类:

class Element
  serialize :body
end

在代码中如何检查属性以确定字段是文本还是序列化?然后如果序列化我需要知道它是否有

  serialize :body
  # vs
  serialize :body, Hash
  # vs
  serialize :body, Array

注意:我需要从 Element.new 转到具有正确类型的对象。我不只是从数据库中获取这个对象。执行Element.new 字段将是nil

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:

    看起来你以serialized_attributes开头

    然后,如果该字段具有序列化字段,它将在哈希中并因此响应object_class。酷

    (dev)> Element.serialized_attributes
      => {"value"=>#<ActiveRecord::Coders::YAMLColumn:0x007ffcb30a9f08 @object_class=Object>, "body"=>#<ActiveRecord::Coders::YAMLColumn:0x007ffcb3096818 @object_class=Object>}
    
    (dev)> Element.serialized_attributes['value']
      => #<ActiveRecord::Coders::YAMLColumn:0x007ffcb3213010 @object_class=Array>
    (dev)> Element.serialized_attributes['value'].try(:object_class)
      => Array
    

    【讨论】:

    • 不幸的是,serialized_attributes 似乎已从 ActiveRecord 中删除。我在 Rails 5+ 中找到的最接近的是 attributes_before_type_castread_attribute_for_serialization
    • 有了(至少)rails 7,你可以使用attributes_to_define_after_schema_loads
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多