有没有办法在Rails 3.1中跳过序列化?

时间:2012-01-19 08:42:50

标签: ruby-on-rails

在我的Rails 3.1应用程序中,我需要读取字段的原始数据,而不进行序列化,然后在没有序列化的情况下将其写下来。这可能吗?怎么样?

通过序列化我的意思是

class Tenant
  serialize :profile_template
end

我显然可以像这样访问这个字段:

> t.profile_template
 => [{:title=>"Page 1", ....}]

然后我也尝试了read_attribute_before_type_cast(根据lucapette的建议):

> t.read_attribute_before_type_cast(:profile_template)
 => nil

使用字符串而不是符号有不同但令人失望的结果:

> t.read_attribute_before_type_cast("profile_template")
 => [{:title=>"Page 1", ...}]

与属性名称相同:

> t.profile_template_before_type_cast
 => [{:title=>"Page 1", ...}]

仅仅是为了记录,我期待的是:

"---
- :title: Page 1
...."

在所有样本中,......是一个非常长的结构的其余部分。

1 个答案:

答案 0 :(得分:3)

是的,有办法。你必须使用

read_attribute_before_type_cast(:foo) 

其中:foo是该字段的名称。 doc并不是那么好,但我记得在Rails 3中有一个很好的解释。

修改

虽然你说这种方式不适合你,但我重新阅读了上述书中的信息。那么,还有另一种方法。你可以使用

bar = foo_before_type_cast

其中foo是字段的名称。它像魔术探测器一样工作,预先将 _before_type_cast 字段的名称挂起。我现在不能尝试,但它确实应该可以正常工作。