我有一个使用Ruby标准库中的Set类的数据结构.我希望能够将我的数据结构序列化为JSON字符串.
默认情况下,将序列化设置为数组:
>> s = Set.new [1,2,3]
>> s.to_json
=> "[1,2,3]"
Run Code Online (Sandbox Code Playgroud)
在尝试反序列化之前哪个是好的.
所以我定义了一个自定义to_json方法:
class Set
def to_json(*a)
{
"json_class" => self.class.name,
"data" => {
"elements" => self.to_a
}
}.to_json(*a)
end
def self.json_create(o)
new o["data"]["elements"]
end
end
Run Code Online (Sandbox Code Playgroud)
哪个效果很好:
>> s = Set.new [1,2,3]
>> s.to_json
=> "{\"data\":{\"elements\":[1,2,3]},\"json_class\":\"Set\"}"
Run Code Online (Sandbox Code Playgroud)
直到我把Set放入哈希或其他东西:
>> a = { 'set' => s }
>> a.to_json
=> "{\"set\":[1,2,3]}"
Run Code Online (Sandbox Code Playgroud)
知道为什么to_json当Set嵌套在另一个对象中时我的自定义不被调用?
可能重复:
attr_accessor默认值
我正在使用Ruby on Rails 3.0.9,我想attr_accessor在我继承的类\ model中初始化一些属性值ActiveRecord::Base.那是,
...在我的模块中我有:
class User < ActiveRecord::Base
attr_accessor :attribute_name1,
:attribute_name2,
:attribute_name3,
...
end
Run Code Online (Sandbox Code Playgroud)
并且我想设置true的所有attr_accessor属性值.我怎样才能做到这一点?
PS:当然我想解决上述问题,接近"Ruby on Rails Way".我知道after_initialize回调但是通过使用该方法,我应该重复每个attribute_name<N>语句,我想将值设置true在该after_initialize语句中(...这不是 DRY - 不要重复自己).也许有更好的方法来实现这一目标.当您声明这些属性时,有没有办法attr_accessor"动态" 设置属性值?也就是说,我希望立即声明和设置attr_accessor属性!
ruby attributes initialization ruby-on-rails ruby-on-rails-3