1

特定の Mongoid レコードを属性で装飾して、その属性が含まれるようにする方法を見つけようとしてto_jsonいます (特定の引数を渡すように言わないでくださいto_json- これは二重にネストされており、ここでは機能しません)。これを行う方法はありますか?私が思いつくことができるのは

my_record[:my_special_attribute]='foo'

もちろん、これは機能しません。

4

1 に答える 1

1

あなたのために働くかもしれない2つのバージョンはここにあります:

上書きto_json:

require 'mongoid'
Mongoid.load!("mongoid.yml", :development)

class MyClass
  include Mongoid::Document

  def to_json(options = {})
    json = JSON.parse(super)
    json['my_special_attribute'] = 'whatever you want'
    json.to_json
  end
end

p MyClass.new.to_json # => "{\"_id\":\"5155899ee44f7ba6e7000001\",\"my_special_attribute\":\"whatever you want\"}"

に引数を渡しますto_json(申し訳ありませんが、完全を期すために):

require 'mongoid'
Mongoid.load!("mongoid.yml", :development)

class MyClass
  include Mongoid::Document

  def not_a_field
    "whatever you want"
  end
end

p MyClass.new.to_json(methods: :not_a_field) # => "{\"_id\":\"51558b67e44f7bddb7000001\",\"my_special_attribute\":\"whatever you want\"}"

このオプションをネストされたレコードに渡すこともできます(二重にネストされているということは、それを意味していると思います):

my_record.to_json(include: {other_class: {methods: :special_field}})

このメソッドを 1 つの特定のレコード (= インスタンス) に追加することもできます。

my_object = MyClass.new

def my_object.not_a_field
  "whatever you want"
end 
p my_object.to_json(methods: :not_a_field) # => "{\"_id\":\"51558cc8e44f7bd1f6000001\",\"not_a_field\":\"whatever you want\"}"
于 2013-03-29T13:12:42.780 に答える