Расположение рельсов не меняется между действиями - PullRequest
0 голосов
/ 09 июня 2018

Я программирую приложение на Rails.Я хочу использовать определенный стиль во всем теге HTML на странице индекса, но остальные страницы должны соответствовать макету приложения.Итак, в моем контроллере у меня есть:

    def index
        render layout: 'index_layout'
    end

    # All other actions follow this scheme
    def any_other_action
    end

В макете индекса есть определенный фрагмент кода, который меняет стиль:

    <!-- Index layout -->
    <html id="index_html">
    ...

    <!-- Application layout (goes normally) -->
    <html>
    ...

Однако, когда я переключаюсь из окна в окно черезтег link_to в Rails, макет не обновляется, и представление остается с идентификатором, назначенным на предыдущей странице, например, если я перехожу из индекса на любую другую страницу, тег html имеет идентификатор index_html, и наоборотнаоборот.Однако, если я выполню полное обновление (нажатием клавиши F5), макет отображается правильно.Я тестировал в Mozilla Firefox и Chrome, чтобы проверить, была ли эта проблема браузером, но результаты те же.

Мой сервер выдает эти выходные данные, когда я запрашиваю страницу индекса, после того как я перехожу на любую другую страницу с помощью тега link_to и затем перезагружаю эту новую страницу:

    Processing by HomeController#index as HTML
     Rendering home/index.html.haml within layouts/index_layout
     Rendered home/index.html.haml within layouts/index_layout (9.9ms)
     Rendered layouts/_navbar.html.haml (13.6ms)
    Completed 200 OK in 1254ms (Views: 1201.9ms | ActiveRecord: 0.0ms)


    # Navigation with link_to tag, the index_html id is still appearing

    Started GET "/community" for 127.0.0.1 at 2018-06-09 11:45:58-0500
    Processing by HomeController#community as HTML
     Rendering home/community.html.haml within layouts/application
     Rendered home/_community_members_panel.html.haml (6.1ms)
     Rendered home/_community_companies_panel.html.haml (8.1ms)
     Rendered home/community.html.haml within layouts/application (41.5ms)
     Rendered layouts/_navbar.html.haml (10.6ms)
    Completed 200 OK in 110ms (Views: 101.0ms | ActiveRecord: 0.0ms)


    # Full refresh of the page with F5 key, the index_html id doesn't appear, as it should.

    Started GET "/community" for 127.0.0.1 at 2018-06-09 11:46:49 -0500
    Processing by HomeController#community as HTML
     Rendering home/community.html.haml within layouts/application
     Rendered home/_community_members_panel.html.haml (5.6ms)
     Rendered home/_community_companies_panel.html.haml (6.6ms)
     Rendered home/community.html.haml within layouts/application (19.4ms)
     Rendered layouts/_navbar.html.haml (8.4ms)
    Completed 200 OK in 74ms (Views: 72.7ms | ActiveRecord: 0.0ms)

Может кто-нибудь дать мне несколькосветит о том, что может быть неудачнымМоя интуиция связана с кешем, но я не могу найти ответ, который может мне помочь.Моя версия Ruby 2.5.1 и моя версия rails 5.1.6

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

1)

before_action custom_layout, only: :index

def custom_layout
    render 'layouts/index_layout'
end

2)

layout :layout_by_resource

def layout_by_resource
   if true #just check as you want here. controller/path/actions etc...
     "index_layout"
   else
     "application"
   end
end
0 голосов
/ 10 июня 2018

Я публикую это, ожидая, что это будет полезно для всех, с проблемой, которую я представил

Проблема заключалась в геме turbolinks.Похоже, что когда вы создаете ссылку с этим драгоценным камнем, он перезагружает только тело страницы.По этой причине тег html не изменялся при перенаправлении по ссылке, но при обновлении.Все, что мне нужно было сделать, это добавить в мои теги ссылок следующий код:

<%= link_to about_us_path, data: {turbolinks: false} %>

И так, макет полностью перерисован с применением желаемых изменений.

Спасибо всем за ихответы!

0 голосов
/ 09 июня 2018

Я думаю, что самый простой способ получить макет клиента Ur - это создать макет с именем контроллера в качестве имени папки и index.html.erb, чтобы отразить действие Ur.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...