Ruby 板


LINE

※ 引述《suomax (shadow)》之铭言: : 环境: : Rails 2.1.0 : Rails 有两个 from_json / to_json 函式,我想利用这两个函式将一个 : 物件阵列存在资料库中,但是搞不太清楚它们的使用方式。 这东西是放在 ActiveRecord::Serialization 中,其中又用到 attribute_names, 我懒得继续追踪下去,rails 内部是一团东西卡在一起,要这样拆开用, 要花一点时间研究。 : 我有一个 class: : class Foo : attr_accessor :value : def initialize(v) : @value = v : end : end 也就是说你这个 Foo 单是 include ActiveRecord::Serialization 是不行的, 刚刚试了一下,会欠 attribute_names, 从哪来的我懒得追踪了。 也许你直接继承 ActiceRecord::Base 会单纯些... 而这边完全没有 include / extend / 继承是不能跑的。 有趣的是,单这样写,to_json 是能动的。但是我看 from_json 需要 attributes= 这个 method, 帮他定义上去之後,to_json 就会烂掉... 同样我也懒得追踪原因了... : foo_arr = Array.new : foo_arr << Foo.new(1) : foo_arr << Foo.new(2) : foo_json = foo_arr.to_json : # => "[{\"value\": 1}, {\"value\": 2}]" : 如果我想把 foo_json 重现回一个 Foo Arry, 要怎麽做呢? : 谢谢 m(_ _)m 基本上这应该是办不到的,因为 json 里面没有 Foo 的资讯, 他不会知道你要把 json 转成什麽? 假使你的 Foo 继承 ActiveRecord::Base 好了(你的例子里没有), 那麽你可以写成像这样: ActiveSupport::JSON.decode(foo_json).inject([]){ |result, foo_attrs| result << Foo.new(foo_attrs) } 但如果你的 Foo 不需要继承 ActiveRecord::Base, 那你大概有三条路可以走: 1. 想办法利用 ActiveRecord::Serialization, 那就要去看 rails 内部 一团混乱的 source code. 根据我的经验,这很难搞,他内部纠结状况很严重。 2. 自己重作 serialization 吧,没有复杂结构的话,这不难写。 3. 改用 Marshal + Base64 存到 text 栏位中。我看到的 binary 都是这样存的。 不知道单用 Marshal 存到 blob 里面行不行?我资料库不熟。 一般而言我会建议 3, 比较省事... -- Nobody can take anything away from him. Nor can anyone give anything to him. What came from the sea, has returned to the sea. Chrono Cross --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18
1F:推 ryudo:没错 3.最省事 相信偶吧 10/01 17:13







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP