2010-08-15 131 views
1

我正在使用to_json,並且包括關聯。 但是,生成的json對象包含所有關聯對象的方法,即使我要求它排除方法。Ruby to_json方法甚至包括被問及不要的方法

我試着這樣做的這些方式:

render :json => @entries.to_json(:include => {:labels => {:only => [:label_id, :name], :methods => []}}) 
render :json => @entries.to_json(:include => {:labels => {:only => [:label_id, :name], :methods => :none}}) 
render :json => @entries.to_json(:methods => [], :include => {:labels => {:only => [:label_id, :name], :methods => []}}) 

而且我得到以下對象:

"entry": { 
    "id" : "1", 
    "other property of entry" : "value", 
    ... 
    "labels" : { 
     "0" : { 
      "name" : "animals", 
      "label_id" : "2", 
     }, 
     "1" : { 
      "name" : "furry animals", 
      "label_id" : "5", 
     }, 
     "_each" : "... method properties", 
     "_reverse" "... method properties", 
     etc... 
    } 
} 

因此,對於「入口」每個JSON對象是正確創建,相關的標籤都包括在內,但是我不能讓它省略「標籤」中的方法。

如何正確執行此操作的任何想法?

謝謝。


編輯:

@nirvdrum,感謝您的建議。 這不能解決它不幸的。

我已將此添加到模型

def as_json(options={}) 
    super(:include => {:labels => {:only => [:label_id, :name]} }) 
end 

和控制器做到這一點:

render :json => @entries 

,結果是一樣的。 任何其他建議,將不勝感激。

回答

0

我不確定如何使用to_json來完成它,但您應該可以使用as_json輕鬆完成它,現在它是定製JSON輸出的首選方法。

關於as_json和to_json如何相互作用的更徹底的處理可以在Jonathan Julian's weblog上找到。

0

你的標籤對象的to_json或as_json是什麼樣的?

在過去,我已經覆蓋的as_json方法,而忽視了這些選項在未來

如果你這樣做:

def as_json(opts={}) 
    super(:include=>[:name, :address]) 
end 

那麼PARAMS會被完全忽略。爲了解決這個問題,你可以:

def as_json(opts={}) 
    opts.merge!(:include=>[:name, :address]) 
    super(opts) 
end 

只是在黑暗中拍攝。讓我知道,如果這是在正確的附近。