1、在config/routes.rb文件中,添加代码,指定网站首页的路径
每次打开网站,系统会通过root 'home#index'
将请求分配到home_controller.rb中的index方法,如果和数据库有数据交互的话,在index方法中调用model模型来实现与数据库的交互,最后将得到的数据显示在app/views/home/index.html.erb页面上。我们再来复习一下网页请求的路径
2、在项目文件夹下运行语句rails g controller home index
其中home是controller的名字,index是controller中实例方法(即action)的名字
从系统返回信息中,我们可以看出:
- 创建文件 app/controllers/home_controller.rb,文件里面创建了index方法
- 创建文件 app/views/home/index.html.erb,我们会在里面添加html、js代码
- 创建文件 app/assets/stylesheets/home.scss,我们会在里面添加css样式代码
- 在routes.rb路由文件中添加了语句
get 'home/index’
,这条语句删掉即可。
index.html.erb文件名的.erb后缀:
erb是Embedded RuBy的简写,意思是「嵌入式的Ruby」。erb允许把一个HTML文件里面加入Ruby代码。插入ruby代码有以下两种形式。
(1)<% ruby代码 %>
结果不需要打印,通常用来声明变量,或者if等判断语句
(2)<%= ruby代码 %>
结果需要打印。home.scss文件名的.scss后缀:
scss是一种语言,可以看成是css的扩展语言,比css更加简洁灵活。即使你是css零基础,也可以直接学习scss。rails是自带scss支持的,将css文件后缀添加上.scss,rails会自动转换。
3、用sublime打开项目文件,在app/assets/stylesheets目录下创建common.css.scss文件
该文件里面放系统通用的样式代码,粘贴下列语句到文件中:
从简书网站粘贴到sublime代码下面可能会有版权哦,这个删掉即可
4、在app/assets/stylesheets目录中创建layout.css.scss文件,粘贴下面代码
该文件里面放网站头部和尾部样式,其实将下列代码放在common.css.scss文件中也可以,但为了让代码更加规整,我们将网站头部和尾部样式统一放到layout.css.scss文件中。
5、在app/assets/stylesheets/home.scss文件中,粘贴下列语句
这个文件是我们在第2步运行rails g controller home index
系统自动产生的文件,这里面主要放views/home文件夹下的页面所对应的样式。
6、app/views/layouts/application.html.erb文件完善
application.html.erb文件是控制页面总体样式的文件,比如在每个页面都需要显示的网站头部和尾部、flash提示、js css文件加载等等,都在此文件定义。
(1)我们先来介绍一下目前application.html.erb文件中代码的含义:
- 开头的
<!DOCTYPE html>
说明这是一份HTML5文件,向下相容于所有浏览器的HTML4。 -
<title>DataSystem</title>
代表网站标签显示的名称 -
<%= csrf_meta_tags %>
防止CSRF攻击 -
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
加载app/assets/stylesheets/application.css文件,之后有外来的css文件,我们也在这里加载 -
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
加载app/assets/javascripts/application.js文件,之后有外来的js文件,我们也在这里加载 -
<%= yield %>
代表被加载的views页面,比如我们现在本节创建的home/index.html.erb页面,当要打开网站首页时yield就代表index.html.erb页面
(2)我们将网站标签改为“萌宠之家”
(3)在网站头部添加登录注册入口,在<%= yield %>上面粘贴以下代码
代码解析:
-
<a class="navbar-brand" href="/">萌宠之家</a>
href="/"
代表当点击「萌宠之家」a标签,页面回到根目录也就是网站主页面 -
<li><%= link_to "登录","#" %></li>
这里应用了嵌入式ruby<%= %>
,这行代码相当于<li><a href="#">登录</a></li>
,因为我们没有定义登录页面,先用#代替登录页面的链接
(4)定义网站尾部以及flash提示,在<%= yield %>
代码下面粘贴下列代码
代码解析:
-
<% if flash.notice %>
<div class="notice"><%= flash.notice %></div>
<% end %>
如果flash.notice有值,页面会弹出flash.notice的值。flash.notice的用法将会在下一节看到 -
<div class="footer"></div>
此div标签里面定义了网站尾部的内容 -
<script>
var hideNotice = function(){
$(".notice").fadeOut("slow");
}
setTimeout(hideNotice, 2000);
</script>
在script标签里面定义的是js方法hideNotice,代码意思是flash.notice提示标签在展示2秒后消失
7、设置网站主页面图片,并且加载jQuery插件(jquery-anystretch)来保证背景图根据窗口的变化来自动调整大小
jquery-anystretch插件使用说明
https://github.com/danmillar/jquery-anystretch
(1)打开下面链接,将照片命名为index.jpg,并保存到app/assets/images目录中。
https://b-ssl.duitang.com/uploads/item/201510/11/20151011223210_wxjQy.jpeg
(2)我们先来添加jQuery插件jquery-anystretch,在app/assets/javascripts文件夹中新建vendor文件夹,在vendor文件夹下,创建文件jquery.anystretch.min.js,然后再文件中粘贴下面代码。
这个文件应该在「插件使用说明」的链接中下载下来,然后粘贴到项目中。我们现在直接在文件中创建这个文件,并粘贴下面代码(即链接中的代码https://raw.githubusercontent.com/danmillar/jquery-anystretch/master/jquery.anystretch.min.js),效果都是一样的
(3)修改config/initializers/assets.rb文件,指定需要预编译的文件类型,在文件最下面加入下面这行代码
代码解析:
-
Rails.application.config.assets.precompile += %w(*.css *.js */*.css */*.js *.png *.jpg *.jpeg *.gif */*.png */*.jpg */*.jpeg */*.gif)
表示系统会将项目中所有以.js、.css、.png为后缀的文件进行预编译
预编译:
资源预编译就是系统把要编译的文件(这些文件通过Rails.config.assets.precompile指定),编译好(解释,合并,压缩,打指纹等)形成静态资源,然后把这些静态资源挪到public/assets目录下,以供nginx, apache等web服务器访问。可以提高访问速度,也可以防止浏览器缓存导致显示旧的样式。
具体原理目前不需要深究,我们只需要知道编写ruby项目,需要配置好Rails.config.assets.precompile,系统会自动编译,预编译好的文件,我们就可以在项目中引入了。
(4)根据「插件使用说明」修改app/views/layouts/application.html.erb文件
A、在application.html.erb文件中引入刚刚添加的jquery.anystretch.min.js文件。
代码解析:(了解即可)
-
<%= javascript_include_tag "application","vendor/jquery.anystretch.min", 'data-turbolinks-track': 'reload'%>
此代码相当于下面代码:
<script src="/assets/application.js?body=1" data-turbolinks-track="reload"></script>
<script src="/assets/vendor/jquery.anystretch.min.js?body=1" data-turbolinks-track="reload"></script>
预编译复习:
我们上面说到预编译好的文件,我们就可以在项目中引入了。我们刚刚添加的jquery.anystretch.min.js文件在application.html.erb文件中引入。vendor/jquery.anystretch.min
被编译成了 /jquery.anystretch.min.self-0316f0c78a4cee85193583472bed190a949676dcdfeef7a69334c4f25463c529.js
。其中self-0316f0c78a4cee85193583472bed190a949676dcdfeef7a69334c4f25463c529
就是编译后的jquery.anystretch.min.js的指纹,它是唯一的,并且会随着jquery.anystretch.min.js内容的改变而改变。
B、 引入两个js文件(根据「插件使用说明」)
C、在js中使用anystretch方法
8、清空app/views/home/index.html.erb文件,粘贴下面语句
代码解析:
-
<div class="home-banner" data-stretch="<%= image_url '/assets/index.jpg' %>">
class="home-banner"
这个div标签class的名字是home-banner,home.scss文件里面写了这个class的对应的样式。上面我们刚刚在application.html.erb文件里面加的js $('.home-banner').anystretch();
其中.home-banner指的就是class为home-banner的标签。
data-stretch是结合jquery.anystretch插件使用的,意思是引入文件路径为/assets/index.jpg的图片 -
<%= link_to "发布新帖", "#", class: "banner-btn btn" %>
我们又遇到了嵌入式ruby,这条代码相当于<a href="#" class="banner-btn btn">发布新帖</a>
最后我们重启项目,在浏览器中打开项目,我们看到上面图片效果,说明网站主页面已经成功完成~