2013-03-28 25 views
0

Mongoid虛擬屬性我試圖得到一些虛擬(非持續)的屬性在一些Mongoid模型的JSON表示露面,但似乎無法得到它的工作:在to_json

class MyModel 
    include Mongoid::Document 

    def virtual_attribute 
    @my_attribute || false 
    end 

    def virtual_attribute=(value) 
    @my_attribute=value 
    end 
end 

class MyController 
    def myaction 
    false_values=MyModel.where(whatever) 
    true_values=MyModel.where(something_else).map{ |model| model.virtual_attribute=true } 
    @val['my_models']=false_values+true_values 
    render json: @val.to_json(:include => {:my_models => {:methods => %w(virtual_attribute)}}) 
    end 
end 

virtual_attribute未出現在json中。我究竟做錯了什麼?

編輯 - 好了,所以我想我的實際問題是,我無法弄清楚如何調用該方法virtual_attribute上的每個對象的數組嵌套在根對象的。

回答

0

to_json將選項直接傳遞給數組和對象。 :include只是一個Mongoid的東西:

render json: @val.to_json(methods: :virtual_attribute) 
+0

但是,假設我直接調用'to_json'在數組上,對吧?似乎一切似乎表明它調用'virtual_attribute',在我的情況下,'@ val'而不是'@val ['my_models']' - 我只是悲慘地誤會了嗎? – cbmanica

+0

嗯,這取決於。因爲你沒有指定什麼'@ val.class',我認爲它是一個'Hash','Hash'只是將選項傳遞給'@val ['my_models']',然後將選項傳遞給你楷模。 – 2013-03-29 16:18:21

+0

'@ val'實際上是一個Mongoid模型 - 我沒有意識到'方法'通常應用於所有子對象。在任何情況下,我的這個實驗似乎都失敗了... – cbmanica