2015-01-26 2 views
0

Я хотел бы, чтобы мой рендеринг json был двумя разными способами. Я теперь мой метод as_json переопределен для отображения полного объекта в виде JSON как это:Два разных метода as_json

{ 
    prop1: stuff, 
    prop2: stuff, 
    innerthings: { 
     { 
      prop1:stuff, 
      prop2:stuff 
     } 
     { 
      prop1:stuff, 
      prop2:stuff 
     } 
    } 
} 

И as_json выглядит следующим образом:

#Renders json 
    def as_json(options={}) 
    super(
     :except => [:created_at, :updated_at], 
     :include => [{:innerthings = > { 
       :except => [:created_at, :updated_at] 
}}] 

    ) 
    end 

Я хотел бы также иметь второй вариант, чтобы оказать как это:

{ 
    prop1:stuff, 
    prop2:stuff, 
    countinnerthings:10 
} 

тока, когда ниже код используется, я получаю первый визуализации:

respond_to do |format| 
    format.json { render json: @thing} 
end 

Я также хотел бы иметь возможность сделать что-то вроде as_list, которое я мог бы использовать в случае, подобном приведенному ниже, для отображения простого списка объектов.

respond_to do |format| 
    format.json { render json: @things.as_list } 
end 

Есть ли простой способ сделать это в рубине на рельсах?

ответ

1

Вы можете просто определить as_list методу

def as_list 
    { 
    prop1: "stuff" 
    } 
end 

Если вам нужно использовать включает в себя и т.д. Вы можете позвонить as_json из метода at_list. Как уже было сказано, сериализаторы - лучший вариант в целом.

+0

Это работает, но мне пришлось изменить мой как json, чтобы сделать что-то вроде опции == nil || options.count == 0 basicjson else super (options) end – steventnorris

3

Вместо того, чтобы катить свой собственный метод as_json. Взгляните на ActiveModel Serializers. Я думаю, что это удовлетворит ваш случай использования и поможет организовать ваш код.

+0

Я видел сериализаторы ActiveModel и вижу их достоинства; однако это устаревшая система, которая была разработана до понимания моих сериализаторов, и в настоящее время это не вариант миграции. – steventnorris

Смежные вопросы