Rails 添加了样式,为何页面没有生效?

diguage · 2013年02月27日 · 最后由 diguage 回复于 2013年02月28日 · 3356 次阅读

目前在看《Agile Web Development with Rails》的第八章内容。

刚刚创建了 Store#index,在 index() 方法中查询出 Product 的代码,在页面展示页正常。按照书上所说,在/app/assets/stylesheets/store.css.scss 中添加了样式定义。但是,刷新页面,样式并没有生效?为啥?

页面的 link 标签输出如下:

<link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" />
<link href="/assets/products.css?body=1" media="all" rel="stylesheet" type="text/css" />
<link href="/assets/scaffolds.css?body=1" media="all" rel="stylesheet" type="text/css" />
<link href="/assets/store.css?body=1" media="all" rel="stylesheet" type="text/css" />

使用 Firebug 查看了一下,发现 body 标签下有个 class,但是值为空。我打开/app/views/layouts/application.html.erb,代码如下:

<!DOCTYPE html>
<html>
<head>
  <title>Depot</title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body class="<% controller.controller_name %>">

<%= yield %>

</body>
</html>

这段代码说明,body 标签中的 class 值已经填充了。更奇怪的是,我中间重启了一下服务器,然后在 Firefox 中刷新页面,出现了短暂的正常。后来,再试这种正常情况没有重新。

刚刚又试了一下,在/app/views/layouts/application.html.erb 的 body 标签中,直接增加 class="store"属性,页面显示正常。

这是怎么回事?谁能帮忙回答一下吗? 问题解决: 谢谢 @Rei 的热心帮助!是因为非常低级的错误,通过代码来说明,看你是否能看出端倪: 原来的代码:

<body class="<% controller.controller_name %>">

正确的代码:

<body class="<%= controller.controller_name %>">

都老鸟了,还犯这么低级的错误,真想扇自己两个耳光!!

补充一个其他问题,不过已经解决,和这个类似,贴出来,方便需要的朋友使用: 原来还有一个问题,放在/app/assets/images/的图片,在网页上不能正常显示出了;手动拷贝到/public 下就可以正常显示了。今天在 StackOverflow 上查到,需要使用 rake assets:precompile 命令,提前编译一下。详细解释如下: http://stackoverflow.com/questions/6213218/rails-3-1-and-image-assets 我试了试,使用 rake assets:precompile 命令编译以后,可以正常显示了。编译还压缩了 CSS 和 JS。两个字:真好!!

哥,你 @ 再多人也没人会理你的,这么做无法讨人喜欢

#1 楼 @huacnlee 好吧,我错了!我去删了。等着人解决吧。

#3 楼 @Rei 我试了试,还是不行。会不会是 Rails 的问题?

#4 楼 @diguage 等号打了没?

#5 楼 @Rei 没!!都老鸟了,还犯这么低级的错误。真想扇自己两个耳光!!哎……

非常感谢!!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号