2014-02-11 2 views
1

У меня есть контроллер, который получает некоторые данные из базы данных, и html-представление отлично отображается в моем браузере.Почему render_to_string испортил страницу?

Теперь мне нужно загрузить один json в свой html (для использования javascript).

добавить следующий код для отображения JSON в контроллере:

@my_json = render_to_string(template: 'dimension_types/index.json.jbuilder') 

Я ничего не делать, просто добавьте этот код в мой контроллер и , что происходит в том, что браузер теперь только показывает моя страница html-код. В html-источнике моя страница завернута в теги <pre></pre>.

В журналах ошибок нет. Я попробовал добавить макет: false, передавая различные комбинации обработчиков и форматов для рендеринга - ничего не меняется.

Что я делаю неправильно? Какую часть документации мне не хватает?

+0

ли намерение оказать JSON вместо HTML? Возможно, обработка представления по умолчанию соответствует HTML, а не JSON –

+0

, он находит шаблон успешно. Как я уже сказал, я попробовал формат: jbuilder и т. Д. – vrepsys

+0

Этот код не будет отображать вас JSON, он превратит ваш шаблон JSON в переменную экземпляра, а затем отобразит обычный HTML или любой шаблон, который он может найти. Вы должны либо иметь шаблон JSON для действия, либо сделать рендер: json => ... в действии. –

ответ

0

Я также столкнулся с этой проблемой. Там может быть лучшим способом сделать это, но здесь является пол-Хак, который будет работать:

# the_controller.rb 
def your_action 
    #... 
    @json_string = render_to_string(template: 'a_template', formats: [:json]) 
    # reset the content type header 
    response.headers["Content-Type"] = 'text/html' 
    #... 
end 

Следующий фрагмент кода показывает, как я использовал строку JSON с моей точкой зрения. Если JSON содержит данные, созданные пользователем, вам необходимо более тщательно их дезинфицировать, чтобы предотвратить риск безопасности XSS (дополнительная информация: https://stackoverflow.com/a/10390313/111635). JSON Я генерации не имеет этой проблемы, поэтому я просто использовал html_safe:

# the_view.html.erb 
# ... bunch of ERB code ... 
<%= javascript_tag do %> 
    $(document).ready(function() { 
    do_stuff_with_json(<%= @json_string.html_safe %>); 
    }); 
<% end %> 
Смежные вопросы