2014-02-11 24 views
1

我有一個控制器,從數據庫中獲取一些數據,並在瀏覽器中很好地呈現html視圖。爲什麼render_to_string弄亂頁面?

現在我需要在我的html中引導一些json(被javascript使用)。

我添加以下代碼來呈現的JSON控制器:

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

我別的什麼也不做,只是這個代碼添加到我的控制器和什麼情況是,現在瀏覽器只顯示我的網頁html代碼。在html源文件中,我的頁面被封裝在<pre></pre>標籤中。

日誌中沒有錯誤。我嘗試添加布局:false,傳遞處理程序和格式的各種組合來渲染 - 沒有任何變化。

我在做什麼錯?我缺少哪部分文檔?

+0

是使JSON而不是HTML的用意何在?可能視圖處理默認爲HTML,而不是JSON –

+0

,它會成功找到模板。正如我所說我嘗試過format :: 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 %> 
相關問題