Rails 3 response_to json, с пользовательскими атрибутами / методами - PullRequest
7 голосов
/ 28 июня 2011

В приложении rails у меня есть действие, которое возвращает представление json для коллекции различных моделей. Это выглядит что-то как это:

respond_to :json

def index
  @cars = Car.all
  @vans = Van.all
  respond_with({
    :cars => @cars,
    :vans => @vans
  })
end

Однако я хочу настроить атрибуты и методы, которые передаются объекту json. Немного похоже:

respond_with({
  :cars => @cars.to_json(:only => [:make, :model], :methods => [:full_name]),
  :vans => @vans
})

Выполнение вышеизложенного приводит к тому, что json-представление «автомобилей» экранируется как одна большая строка, например:

{
  "cars":"[{\"car\":{\"make\":\"Ford\"  ... etc
  "vans": [{"van":{"make":"Citreon"  ... vans not escaped
}

Очевидно, я подхожу к этому неправильно. Кто-нибудь может указать мне правильное направление?

1 Ответ

12 голосов
/ 28 июня 2011

Поскольку вы вкладываете to_json в другой Hash, я думаю, вам нужно использовать as_json (который возвращает Hash вместо String) вместо:

respond_with({
  :cars => @cars.as_json(:only => [:make, :model], :methods => [:full_name]),
  :vans => @vans
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...