Rails: частичный рендеринг на одной странице в Rails

Я пытаюсь частично отобразить на одной странице, определенной в application.html.erb.

Это должно быть связано с URI http://website.com/ (корневой или индексный, если хотите).

маршруты.rb

has root :to => static_pages#home

application.html.erb показывает

<!DOCTYPE html>
<html>
<head>
  <title><%= full_title(yield(:title)) %></title>
  <%= stylesheet_link_tag    "application", media: "all",
  "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
  <%= render 'layouts/shim' %>
</head>
<body>
  <%= render 'layouts/header' %>
  <%= render 'layouts/homepage_slider' %>
  <div class="container">
    <%= yield %>
  </div>
  <%= render 'layouts/footer' %>
</body>
</html>

Я хотел бы отобразить ‹‹ layouts/homepage_slider >> только в / или моем индексном пути. Он должен быть снаружи для <div class=container">, иначе я бы специально добавил его в файл static_pages/home.


person sandovalg    schedule 07.03.2014    source источник


Ответы (2)


Вы можете обернуть его оператором if/else.

<% if current_page?(root_path) %>
  <%= render 'layouts/homepage_slider' %>
<% end %>

or

<%= render "layouts/homepage_slider" if current_page?(root_path) %>
person Justin    schedule 07.03.2014
comment
Вместо проверки корневого пути я бы установил переменную в контроллере корневого пути и проверил ее в представлении макета. Таким образом, вы всегда можете переключить элемент из других представлений, если позже захотите. - person DGM; 07.03.2014
comment
+1, да, мне нравится этот метод, если вы используете его для других представлений! - person Justin; 07.03.2014
comment
В настоящее время не использую его для других представлений. . . Однако; метод контроллера казался лучшей практикой. Спасибо. Наслаждайся выходными! Ваше здоровье! - person sandovalg; 08.03.2014

У меня была такая же проблема при работе с Rails 6 в Ubuntu 20.04.

Для меня мне нужно было частично отобразить тег заголовка моего app/views/layouts/application.html.erb, чтобы он отображался на одной странице, которая была app/views/products/show.html.erb.

Вот как я это сделал:

Я создал партиал в app/views/shared/_facebook_metatags.html.erb:

<!-- Here's an example of Facebook's Open Graph Markup -->
<!-- https://developers.facebook.com/docs/sharing/webmasters -->

<meta property="og:url"           content=<%= "#{@product_url}" %> />
<meta property="og:type"          content="article" />
<meta property="og:title"         content=<%= "#{@product.name}" %> />
<meta property="og:description"   content=<%= "#{@product.short_description}" %> />
<meta property="og:image"         content=<%= "#{@product.image_url}" %> />

Затем я включил его в тег заголовка моего app/views/layouts/application.html.erb, чтобы он отображался на странице app/views/products/show.html.erb.

<!DOCTYPE html>
<html>
  <head>
.
.
.

    <%= render partial: '/shared/facebook_metatags' if params[:controller] == 'products' && params[:action] == 'show' %>
.
.
.
  </head>
</html>

Это все.

Надеюсь, это поможет

person Promise Preston    schedule 19.11.2020