gpt4 book ai didi

css - 在 Rails 中嵌套布局时,如何防止我的 application.css 文件被包含两次?

转载 作者:行者123 更新时间:2023-11-28 05:38:13 25 4
gpt4 key购买 nike

我正在使用 Rails 4.2.3。嵌套布局时,如何防止我的 application.css.scss 文件被包含两次?在我的“app/views/layouts/application.html.erb”文件中有

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= content_for?(:title) ? yield(:title) : "Runtrax" %></title>
<meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Runtrax" %>">
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>

<% if !current_user.nil? %>
<div id="container">
<header>
<%= render 'layouts/navigation' %>
</header>
<main role="main">
<%= render 'layouts/messages' %>
<%= yield %>
</main>
</div>
<% else %>
<%= yield %>
<% end %>

</body>
</html>

然后在我的用户布局中,app/views/layouts/user.html.erb,我有

<%= javascript_include_tag "countries" %>
<%= javascript_include_tag "users" %>

<%= yield %>

<% parent_layout "application" %>

但是,当呈现我的一个用户页面时,它出现在 元素中......

这也出现在用户布局呈现时(在

部分)......

<link rel="stylesheet" media="all" href="/assets/application.self-97ad5c0b00e27e03a2a434530385915aee55c42b8f0ae090c1a2abf4507ff7d8.css?body=1" />

我只希望它出现一次。我需要做什么才能实现这一目标?如果重要的话,这是我正在使用的 app/helpers/layout_helper.rb 模块

# Place this in app/helpers/layouts_helper.rb
module LayoutHelper
def parent_layout(layout)
@view_flow.set(:layout, output_buffer)
output = render(:file => "layouts/#{layout}")
self.output_buffer = ActionView::OutputBuffer.new(output)
end
end

最佳答案

对于几个布局,我只是在布局文件夹中创建一个额外的布局,然后在所需的 Controller 操作结束时,我执行:

render layout: "user" # for your case it is "user"

所以实际上你并不是创建嵌套布局,而是创建单独的布局。您可以将 current_user 逻辑移动到 Controller 操作中以选择要呈现的布局。为了使您的布局 View 代码干燥,请使用部分。

这是一个如何拆分布局的示例:

<!-- application layout -->
<!DOCTYPE html>
<html>
<head>
<%= render "layouts/head_section" %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
</head>
<body>

<%= yield %>

</body>
</html>

<!-- user layout -->
<!DOCTYPE html>
<html>
<head>
<%= render "layouts/head_section" %>
<%= javascript_include_tag "countries" %>
<%= javascript_include_tag "users" %>
</head>
<body>
<div id="container">
<header>
<%= render 'layouts/navigation' %>
</header>
<main role="main">
<%= render 'layouts/messages' %>
<%= yield %>
</main>
</div>
</body>
</html>

<!-- _head_section.html.erb -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= content_for?(:title) ? yield(:title) : "Runtrax" %></title>
<meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Runtrax" %>">
<%= csrf_meta_tags %>

# controller
def some_action
...
render layout: (current_user.present? ? "user" : "application")
end

不过,如果您想在两种布局中使用 turbolinks,则需要考虑在您的应用程序布局或 list 文件中仅包含必要的 js 和 css 文件,例如 jquery、turbolinks 和其他常用功能。其余的应该包含在您的自定义布局中,因此您的布局将如下所示:

<!-- application layout -->
<!DOCTYPE html>
<html>
<head>
<%= render "layouts/head_section" %>
<%= javascript_include_tag "none_users" %>
</head>
<body>

<%= yield %>

</body>
</html>

<!-- user layout -->
<!DOCTYPE html>
<html>
<head>
<%= render "layouts/head_section" %>
<%= javascript_include_tag "countries" %>
<%= javascript_include_tag "users" %>
</head>
<body>

<div id="container">
<header>
<%= render 'layouts/navigation' %>
</header>
<main role="main">
<%= render 'layouts/messages' %>
<%= yield %>
</main>
</div>

</body>
</html>

<!-- _head_section.html.erb -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= content_for?(:title) ? yield(:title) : "Runtrax" %></title>
<meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Runtrax" %>">
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>

一般来说,您希望尽量减少布局的复杂性并避免使用 if-else 逻辑,因为随着时间的推移,这种逻辑往往会变得非常困惑。

关于css - 在 Rails 中嵌套布局时,如何防止我的 application.css 文件被包含两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com