В Rails, как вы визуализируете JSON с помощью представления?


предположим, что вы находитесь в своем контроллере пользователей и хотите получить ответ json для запроса show, было бы неплохо, если бы вы могли создать файл в своих представлениях/users/ dir с именем show.json и после того, как ваши пользователи#show action завершены, он отображает файл.

В настоящее время вам нужно сделать что-то вроде:

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json{
      render :json => @user.to_json
    }
  end
end

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

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json
  end
end

этот спас бы меня тонны горя, и смыл бы это ужасно грязное чувство, которое я получаю, когда я делаю свой json в контроллере

7 120

7 ответов:

вы должны быть в состоянии сделать что-то подобное в свой respond_to блок:

respond_to do |format|
    format.json 
    render :partial => "users/show.json"
end

который будет отображать шаблон в app/views/users/_show.json.erb.

попробуйте добавить вид users/show.json.erb Это должно быть отображено, когда вы делаете запрос на формат JSON, и вы получаете дополнительное преимущество от его визуализации erb тоже, так что ваш файл может выглядеть примерно так

{
    "first_name": "<%= @user.first_name.to_json %>",
    "last_name": "<%= @user.last_name.to_json %>"
}

как уже упоминалось, вам нужен пользователь / шоу.представление json, но есть варианты для рассмотрения языка шаблонов...

ERB

работает из коробки. Отлично подходит для HTML, но вы быстро обнаружите, что это ужасно для JSON.

РАБЛЬ

хорошее решение. Нужно добавить зависимость и изучить ее DSL.

JSON Builder

такое же дело как Рабл: хорошее решение. Нужно добавить зависимость и изучить ее DSL.

Простые Рубин

Ruby является удивительным при создании JSON и нет ничего нового, чтобы узнать, как вы можете назвать to_json на хэш или AR-объект. Просто зарегистрируйся .расширение rb для шаблонов (в инициализаторе):

ActionView::Template.register_template_handler(:rb, :source.to_proc)

затем создайте представление пользователи / показать.формат JSON.РБ:

@user.to_json

для получения дополнительной информации об этом подходе см. http://railscasts.com/episodes/379-template-handlers

RABL, вероятно, самое приятное решение для этого, которое я видел, если вы ищете более чистую альтернативу синтаксису ERb. json_builder и argonaut, которые являются другими решениями, оба кажутся несколько устаревшими и не будут работать с Rails 3.1 без некоторых исправлений.

RABL доступен через gem или проверить репозиторий GitHub; хорошие примеры тоже

https://github.com/nesquena/rabl

просто чтобы обновить этот ответ ради других, которые окажутся на этой странице.

в Rails 3, вам просто нужно создать файл в views/users/show.json.erb. Элемент @user объект будет доступен для просмотра (так же, как это было бы для html.) Вам даже не нужно

просто добавить show.json.erb файл с содержимым

<%= @user.to_json %>

иногда это полезно, когда вам нужны дополнительные вспомогательные методы, которые не доступны в контроллер, т. е. image_path(@user.avatar) или что-то для создания дополнительных свойств в JSON:

<%= @user.attributes.merge(:avatar => image_path(@user.avatar)).to_json %>

Это потенциально лучший вариант и быстрее, чем ERB:https://github.com/dewski/json_builder