content_for Rails 4 не загружается

У меня есть это в моем application.html.erb

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <%= stylesheet_link_tag "application","jquery.mobile-1.4.5"  %>
    <%= javascript_include_tag "application","jquery.mobile-1.4.5" %>
    <%= csrf_meta_tags %>
    <%= yield(:head) %>
</head>

Мой файл main/index.html.erb имеет следующее:

<%= content_for :head do %>
<style type="text/css">
    body {
        display: table;
        position: relative;
        width: 100%;
        height: 100%;
        background: url(/assets/main/background.jpg) no-repeat center center scroll;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        background-size: cover;
        -o-background-size: cover;
    }
    .center-wrapper{
        margin: 0 auto;
        text-align: center;
        vertical-align: middle;
    }
    .ui-page {
        background: transparent;
    }
    .ui-content{
        background: transparent;
    }
</style>
<% end %>

Это корневой URL-адрес, и он загружается правильно. После этого, если я перейду к любому другому URL-адресу, скажем, vendors/index.html.erb, css, сгенерированный из-за content_for (main/index.html.erb), не очищается.

Я попытался поместить CSS в vendors/index.html.erb, изменив фоновое изображение, используемое в теле. Но это не нашло отражения. Он по-прежнему использует css, созданный из-за content_for в main/index.html.erb.


person Sonali Gupta    schedule 06.03.2015    source источник
comment
Вы используете турболинки?   -  person patrick    schedule 06.03.2015
comment
Замените <%= content_for :head do %> на <% content_for :head do %>   -  person vee    schedule 06.03.2015
comment
^^^ Это правильный ответ. равенство в <%= означает распечатать материал в шаблоне прямо здесь и сейчас, но когда вы используете контент, вы не пытаетесь распечатать его немедленно, а сохраняете его, чтобы макет мог его использовать.   -  person Taryn East    schedule 06.03.2015
comment
@patrick Нет, я не использую турболинки.   -  person Sonali Gupta    schedule 06.03.2015
comment
@vee Это все то же самое. Более того, я заметил, что он не загружает content_for в vendors/index.html.erb, пока я не перезагружу страницу. Он как-то пропускает этот блок.   -  person Sonali Gupta    schedule 06.03.2015


Ответы (1)


Проблема заключалась в том, что я использую jquery-mobile, и он работает так же, как турболинки. Это только перезагружала часть страницы, содержащуюся в

<div data-role="page">
    .......
</div>

Ссылки, которые имеют специфичные для страницы css/js, должны быть добавлены в тег заголовка страницы. Для этого необходимо вызвать страницу без ajax и перезагрузить ее. Итак, вам нужно использовать:

rel="external", data-ajax="false" or target attributes
person Sonali Gupta    schedule 06.03.2015