Rails HAML View Рендеринг Необработанный HTML - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь отобразить простое представление, используя HAML, которое показывает коллекцию объектов JSON с заголовком выше.Я использую маршрут get 'posts.json', to: 'posts#posts_as_json'.Это приводит к следующему представлению.

posts_as_json.haml

%h1 Posts As JSON
%div.gutter-spacing
  =raw(@posts)

Проблема, с которой я сталкиваюсь, состоит в том, что страница будет отображать необработанные теги HTML, а также сам JSON.Я пытался выяснить, в чем проблема, и, основываясь на некоторых экспериментах, думаю, это напрямую связано с использованием .json в моей маршрутизации.Если я удаляю это, это, кажется, отображает HTML как ожидалось.Обновление: это определенно корень проблемы

. Использование маршрута 'posts.json' является требованием моего проекта, но мне также нужно иметь возможность искать проанализированный JSON, который яранее решались с помощью простого ввода текста HTML, привязанного к функции JavaScript.Как я могу использовать эту конечную точку, все еще отображая HTML вместе с данными JSON?

1 Ответ

3 голосов
/ 03 июня 2019

Проблема в том, что если вы запрашиваете формат .json, rails автоматически попытается отправить его как ответ с соответствующим типом MIME application/json.

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

Вы можете переопределить тип MIME для вашего метода рендеринга:

render content_type: content_type: "text/html"

Или, если вы хотите обработать оба запроса от одного и того же действия контроллера, вы можете сделать это с помощью respond_to -метода:

def index
  @posts = Post.all
  respond_to do |format|
    format.html { render }
    format.json { render 'index_as_json.html', content_type: "text/html" }
  end
end
...