2012-01-17 49 views
0

我正在使用Spree 0.70,Rails 3.1和Ruby 1.9的網站上工作。我注意到有些頁面沒有使用<html><head></head><body></body></html>塊。頁面呈現沒有HTML,頭部和身體元素

相反,導軌似乎自動包裹頁在<html><body></body></html>塊,這意味着旨在是在頭部(即CSS包括,所述title頁塊等)的任何的代碼顯示了身體內,以及任何取決於頭部或身體標籤(例如CSS)的屬性不起作用,因爲這些元素缺失。

這使我感到困惑,因爲我的佈局顯然是渲染,局部和全部,但是這些頂層元素被忽略或覆蓋。

當我說「一些頁面」時,我已經確認它不會發生在管理頁面中,並且它不會發生在限制在我的應用程序中的頁面上(即它們不使用spree_application.html.erb佈局及其佈局控制器沒有繼承Spree::BaseController。)我已經覆蓋spree_application.html.erb佈局通過在我的應用程序(我沒有選擇)複製,並且所有這個問題的頁面使用該佈局。這可能是一個因素嗎? (Here is a page with the broken layout.

如何獲取我的根元素?

ETA:這是我在我的應用程序中的文件app/views/layouts/spree_application.html.erb。這是所有顯示該問題的頁面都有共同的佈局。請注意,div結構與Spree提供的佈局略有不同;這就是爲什麼我需要替換佈局而不是使用Deface覆蓋。

<!DOCTYPE HTML> 
<%# Overrides the Spree default template %> 
<html> 
    <head data-hook="inside_head"> 
    <%= render 'shared/head' %> 
    <!--[if lte IE 7]> 
      <link rel="stylesheet" type="text/css" href="/stylesheets/ie.css" /> 
    <![endif]--> 
    </head> 
    <body class="<%= body_class %>" id="<%= @body_id || 'default' %>" data-hook="body"> 
    <div id="page-scroll" data-hook> 
     <div class='header-wrapper'></div> 
     <div id="header" data-hook> 
     <ul id="nav-bar" data-hook> 
      <%= render 'shared/nav_bar' %> 
     </ul> 
     <%= render 'shared/logo' %> 
     </div> 

     <div id="wrapper" data-hook> 
     <%= render 'shared/content' %> 
     </div> 
    </div> 

    <%= render 'shared/footer' %> 
    <%= render 'shared/google_analytics' %> 
    </body> 
</html> 
+0

特別是任何頁面?你能否提供一些步驟來重現此問題? – 2012-01-18 01:12:49

+0

編輯該問題以包含指向破損佈局的頁面的鏈接。 – pjmorse 2012-01-18 16:14:52

+0

沒錯,但是你怎麼到了那個階段呢?在我甚至可以開始提供解決方案之前,我需要一些步驟在本地重現此問題。 – 2012-01-18 19:19:31

回答

1

我通過移動僱員再培訓局註釋掉<html>容器並進入了<head>容器解決了這個問題。我沒有時間確認的理論是,當Deface正在使用時(即Spree中),即使ERb模板需要有效,並且<html></html>內部的容器除<head>...</head><body>...</body>之外的任何內容都無效。因此,無論是Deface(或Nokogiri,Deface在底層使用)都會重寫這個以強制它有效,或者剝離這些容器,並且Rails在輸出之前添加基本代碼。