Упорядочивание JSON, отображаемого контроллером Rails - PullRequest
1 голос
/ 18 декабря 2011

У меня есть контроллер Rails 3.1, который отображает контакты пользователя, включая связанные объекты электронной почты и объекты сообщений. Если я только рендеринг контактов, я могу сделать следующее:

    @contacts = @current_user.contacts.order('last_name asc', :include => [:emails, :messages])
    render json: @contacts, :include => [:emails, :messages]

Как видите, я хочу отсортировать контакты по фамилии, а не по умолчанию. Теперь мне нужно визуализировать объект пользователя с другими связанными объектами. Поэтому я попробовал следующее, но, конечно, контакты не в нужном порядке:

    render :status => 200, :json => {
      :user => @current_user.as_json(
        :include => {
          :foos => {
            :except => :user_id
          },
          :contacts => {
            :except => :user_id,
            :include => [:emails,:messages]
          },
          :bars => {
            :except => :user_id
          }
        }
      )
    }

Я не видел никакой помощи в документации as_json , и мне не удалось найти правильный синтаксис методом проб и ошибок.

1 Ответ

1 голос
/ 18 декабря 2011

В этом случае я бы упорядочил контакты в Ruby / SQL и просто создал свой собственный JSON для рендеринга вместо использования as_json и его различных :include / :except методов.

Создайте хэш своих данных и отправьте их для рендеринга.

Существуют всевозможные библиотеки, которые могут упростить сборку JSON. JBuilder - одна из таких библиотек. Посмотрите внизу страницы JBuilder для ссылок на другие подобные библиотеки.

...