Rails - Сериализация модели в JSON с верблюдом - PullRequest
6 голосов
/ 02 июня 2011

Мне нужно сериализовать модель в json и сделать все ключи верблюжьими. Я вижу, что в to_xml есть опция для разрешения верблюжьего случая. Кажется, я не могу заставить сериализацию json вернуть мне верблюжий хеш. Это возможно в рельсах?

Ответы [ 4 ]

10 голосов
/ 23 июля 2014

У меня была похожая проблема. После небольшого исследования я обернул метод as_json ActiveModel помощником, который верблюжил бы хэш-ключи. Тогда я бы включил модуль в соответствующую модель (ы):

# lib/camel_json.rb
module CamelJson
  def as_json(options)
    camelize_keys(super(options))
  end

  private
  def camelize_keys(hash)
    values = hash.map do |key, value|
      [key.camelize(:lower), value]
    end
    Hash[values]
  end
end



# app/models/post.rb
require 'camel_json'
class Post < ActiveRecord::Base
    include CamelJson
end

Это сработало очень хорошо для нашей ситуации, которая была относительно упрощенной. Однако, если вы используете JBuilder, очевидно, есть конфигурация, чтобы установить случай верблюда по умолчанию: https://stackoverflow.com/a/23803997/251500

5 голосов
/ 26 августа 2016

Если вы используете rails, пропустите добавленную зависимость и используйте Hash#deep_transform_keys. Он также имеет дополнительное преимущество: верблюд вложенных ключей (удобно, если вы делаете что-то вроде user.as_json(includes: :my_associated_model)):

h = {"first_name" => "Rob", "mailing_address" => {"zip_code" => "10004"}}
h.deep_transform_keys { |k| k.camelize(:lower) }
=> {"firstName"=>"Rob", "mailingAddress"=>{"zipCode"=>"10004"}}

Источник: https://github.com/rails/rails/blob/4-2-stable/activesupport/lib/active_support/core_ext/hash/keys.rb#L88

0 голосов
/ 09 августа 2013

Работая с RABL Renderer напрямую, вы можете передать встроенный шаблон вместо извлечения его из файла:

Rabl::Renderer.new("\nattributes :name, :description", object).render

Символ \n необходим в начале строки.

0 голосов
/ 02 июня 2011

Мне кажется странным использовать верблюжьи имена атрибутов в Rails, не говоря уже о json. Я придерживаюсь соглашений и использую подчеркнутые имена переменных.

Однако взгляните на этот камень: RABL . Он должен быть в состоянии помочь вам.

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