Метод Ruby to_json включает методы, даже когда их просят не - PullRequest
1 голос
/ 15 августа 2010

Я использую to_json, включая ассоциации.Однако результирующий объект 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

И результаттот же самый.Любые другие предложения будут оценены.

Ответы [ 2 ]

0 голосов
/ 16 августа 2010

Как выглядит объект метки to_json или as_json?

В прошлом я переопределил метод as_json и игнорировал входящие параметры.

Если вы сделаете это:

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

тогда параметры будут полностью игнорироваться. Для борьбы с проблемой вы могли бы:

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

Просто выстрел в темноте. Дайте мне знать, если это даже в непосредственной близости.

0 голосов
/ 15 августа 2010

Я не уверен, как это сделать с to_json, но вы должны быть в состоянии сделать это достаточно легко с помощью as_json, который теперь является предпочтительным способом настройки вывода JSON.

Более подробное описание взаимодействия as_json и to_json можно найти в блоге Джонатана Джулиана .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...