目前在看《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。两个字:真好!!