在我的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
...."
在所有样本中,......是一个非常长的结构的其余部分。
答案 0 :(得分:3)
是的,有办法。你必须使用
read_attribute_before_type_cast(:foo)
其中:foo是该字段的名称。 doc并不是那么好,但我记得在Rails 3中有一个很好的解释。
修改的
虽然你说这种方式不适合你,但我重新阅读了上述书中的信息。那么,还有另一种方法。你可以使用
bar = foo_before_type_cast
其中foo是字段的名称。它像魔术探测器一样工作,预先将 _before_type_cast 字段的名称挂起。我现在不能尝试,但它确实应该可以正常工作。