View在redirect_to之后丢失了CSS链接标记

时间:2014-06-04 22:22:49

标签: html css ruby-on-rails

我目前正在开发一个网络应用程序,我有一个小问题。我在视图控制器中有一个redirect_to root_path语句,如果逻辑语句返回true则调用该语句。在重定向到的页面上,我在布局视图中有一个stylesheet_link_tag。当我手动上拉页面时,此标记会正确加载。但是,在使用redirect_to语句并从中加载此页面后,样式表标记不再存在。它仍然加载application.css文件和我的application.js文件,没有任何问题,但pagename.css链接标记甚至都没有显示。

以下是页面的显示方式:

http://i.stack.imgur.com/tu25b.png

然后我刷新一次:

http://i.stack.imgur.com/hDtzk.png

请帮帮我!我很想知道为什么会这样,以及如何解决它。提前谢谢!

以下是所有相关代码位:

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

1 个答案:

答案 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) - 允许您更广泛地控制您在页面上加载的内容