我目前正在开发一个网络应用程序,我有一个小问题。我在视图控制器中有一个redirect_to root_path语句,如果逻辑语句返回true则调用该语句。在重定向到的页面上,我在布局视图中有一个stylesheet_link_tag。当我手动上拉页面时,此标记会正确加载。但是,在使用redirect_to语句并从中加载此页面后,样式表标记不再存在。它仍然加载application.css文件和我的application.js文件,没有任何问题,但pagename.css链接标记甚至都没有显示。
以下是页面的显示方式:
然后我刷新一次:
请帮帮我!我很想知道为什么会这样,以及如何解决它。提前谢谢!
以下是所有相关代码位:
users_controller.rb
...
def logout
cookies[:logged_in] = false
cookies[:user_id] = 0
redirect_to root_path # Tried using root_url also; didn't fix the problem.
end
...
homepage / index.html.erb(root_path)
A bunch of HTML. Not the problem.
布局/ homepage.html.erb
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= stylesheet_link_tag 'homepage' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<div id="header_container">
<%= link_to "#{image_tag 'logo.png'}".html_safe, root_path %>
<div class="login tab">
<span>
Login
<%= image_tag "down_arrow.png" %>
</span>
<%= form_tag login_path, :method => 'post' do %>
<% end %>
</div>
<div class="register tab">
<span>
<%= link_to "Register", register_path, "data-ajax" => "false", :rel => false %>
</span>
</div>
</div>
<div id="main_container">
<%= yield %>
</div>
</body>
</html>
我必须将homepage.css资产添加到config / locales / application.rb,所以这里是:
require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(*Rails.groups)
module Labs
class Application < Rails::Application
config.assets.precompile += %w( homepage.css )
config.assets.precompile += %w( dropdown.js )
end
end
答案 0 :(得分:4)
问题可能是双重的:
-
<强> Turbolinks 强>
首先,您可能与Turbolinks
有问题 Turbolinks因防止造型而臭名昭着。页面上的javascript更改;因为它基本上只刷新页面的<body>
标记(保持<head>
完好无损)。虽然这主要是因为您通过链接点击遍历页面(我不确定redirects
),但您基本上需要确保即使启用了Turbolinks也可能发生任何样式更改。
为此,您需要确保在没有调用Turbolinks的情况下加载。为此,您应该use the data
no-turbolink
tag,如下所示:
<%= link_to "link", link_path, data: { no_turbolink: true } %>
这样可确保您在点击该特定链接时不会致电turbolinks
,确保“裸”刷新。
-
<强>重定向强>
重定向方法可能是您遇到问题的原因。
当你提到:
使用redirect_to语句并从中加载此页面,样式表标记不再存在。它仍然加载application.css文件和我的application.js文件,没有任何问题,但pagename.css链接标记甚至没有显示。
解决此问题的方法是确保layout
包含正确的stylesheets
。您已添加了homepage.html.erb
代码 - 我很想说如果pagename.css
未加载,则基本上意味着您没有正确调用该文件。
我会这样做:
<%= stylesheet_link_tag controller_name %>
这将允许您为每个控制器调用样式表(使用controller_name
helper method) - 允许您更广泛地控制您在页面上加载的内容