2012-04-09 1 views
0

Я в настоящее время пытаюсь вернуть несколько объектов JSON в одном из моих контроллеров как таковых.Rails рендерит JSON, используя <% = не работает как ожидалось

@chromosomes = @organism.chromosomes.to_json 
    @file_data = current_user.files.to_json 
    respond_to do |format| 
    format.html 
    end 

Однако на переднем конце, когда я делаю:

<%= @chromosomes %> 

или

<%= @file_data %> 

Я не получаю объект JSON, а я получаю данные в виде строки с такие вещи, как & и т. д. Я пробовал разбор строки, такой как

console.log($.parseJSON("<%= @chromosomes %>")); 

но он все еще не работает. Это потому, что отправленный запрос является html?

Спасибо!

+0

Вы отредактировали вопрос, но ответ все тот же, см. Ниже ... – Snips

ответ

2

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

respond_to do |format| 
    format.html index.html.erb 
    format.xml { render :xml => @organism.chromosomes) } 
    format.json { render :json => @organism.chromosomes) } 
end 
0

Вам просто нужно

render :json => @organism.chromosomes 

Просмотрам на редактировании, я думаю, что вы хотите ниже:

console.log($.parseJSON("<%= raw @chromosomes %>")); 
+0

Спасибо, но я все еще не получаю объект json на переднем конце, когда я его выводю. Я уточнил вопрос с дальнейшими подробностями. Еще раз спасибо! –

0

Проблема оказалась в том, что Rails закодировал json-данные как строку, которая по умолчанию. Для устранения проблемы я использовал

<%= @chromosomes.html_safe %> 

на переднем конце. Дополнительная информация об этом можно найти здесь:

Weird JSON Javascript problem in Rails

0

Это должно работать, для Rails 2,

console.log($.parseJSON(<%= @chromosomes.dump %>)); 

для Rails 3,

console.log($.parseJSON(<%= @chromosomes.dump.html_safe %>)); 

Строка # свалка экранирует символы и делает работу parseJSON(). Обратите внимание, что никаких кавычек не требуется.

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