2015-06-08 1 views
0

Я использую рельсы 4.2 с Руби 2.1.5Как я могу получить несколько слоев в формате JSON?

создать две таблицы 1.API (имя: строка) и 2.Описание (ключ: строка, значение: строка) .FOR отношение, API HAS_MANY DATAS.

Ниже приведено мое указательное действие контроллера для данных возврата в формате JSON.

def show 
    @api = Api.find(params[:id]) 
    @descriptions = @api.descriptions.all 
    data = {} 
    @descriptions.each do |f| 
    data[f.key] = f.value 
    end 
    render json: data, :except => [:created_at, :id, :api_id ] 
end 

И может возвращать данные в формате JSON, как:

{ 
    "country":"USA" 
    "City":"NY" 
} 

Мой вопрос, как я должен получить данные, как показано ниже (несколько данных в формате JSON).

{ 
    "country":{ 
       "Taiwan":"Taipei", 
       "China":"Hong Kong", 
       "England":"Londan" 
      }, 

    "password_type":"known", 
    "password":"123456" 
} 

Как мне перепроектировать мою базу данных или любым другим способом?

+0

Не могли бы вы опубликовать данные '@ description' объект имеет? – Surya

+0

Таблица описаний имеет два столбца (ключ и значение). В шаблоне просмотра я создаю окно ввода, которое позволяет пользователю вводить туда значение. – Dreams

ответ

0

Я бы посоветовал реализовать шаблонный обработчик для этого. Райан Бейтс записал отличный скринкаст на них, проверьте это: Railscasts PRO #379 Template Handlers (есть также связанное репетирование github с примером приложения here).

Имея это в виду, вы просто закончить действие контроллера рендеринга в json.rb шаблон, который содержит следующий трюк:

# app/views/apis/show.json.rb 

def list_of_countries 
    @descriptions.inject({}) do |result, object| 
    result[object["country"]] = object["city"] 
    result 
    end 
    # => {"USA": "NY", "Great Britain": "London"} 
end 

{ 
    country: list_of_countries, 
    password_type: @password_type # I assume you've set this up in controller 
}.end.to_json 
# {country: {"USA": "NY", "Great Britain": "London"}, password_type: "salt"} 
Смежные вопросы