相关疑难解决方法(0)

在嵌套对象中使用自定义to_json方法

我有一个使用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嵌套在另一个对象中时我的自定义不被调用?

ruby serialization json

9
推荐指数
1
解决办法
9599
查看次数

如何初始化'attr_accessor'属性值?

可能重复:
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

9
推荐指数
2
解决办法
2万
查看次数