为了账号安全,请及时绑定邮箱和手机立即绑定

Web开发的王者: Rails 教程. 3. 视图 (思维原创)

目录

安装Linux + Win 7 双系统

Ruby Lesson 1: 初识

Ruby Lesson 2: 基础知识

Ruby Lesson 3: 进阶

Rails Lesson 1. 入门

Rails Lesson 2. 路由-上

Rails Lesson 2. 路由-下

阅读本文收获
  • 知道Rails中的erb文件跟 JSP, PHP是一样的.
  • 知道如何使用controller中的变量
  • 知道partial ( 片段)
View的基本概念和用法

View在MVC中,一直是最简单的概念. 大家要分分钟入门.

视图在Rails中, 就是 .html.erb 文件. 我们原则上把跟HTML有关的东西,都写在 视图中.

每个视图都要由controller触发. 所有的视图文件,都放在: app/views/ 目录下. 例如: app/views/books/new.html.erb 这是Rails的约定 .

最基本用法

下面是一个最简单的erb文件:


<p>当前时间是:  <%= Time.now %></p>

它会直接被转换成下面的HTML:


<p>当前时间: 2016-10-08 21:01:35 +0800</p>
<% %> 与 <%= %> 的区别
  • <% %> 表示仅运行代码, 例如: <% a = 1 %>
  • <%= %> 表示,不但运行, 而且把结果渲染到html中. 例如: <%= Time.now %>
Rails中的视图在什么时候被渲染?

Rails架构: M - V - C(几乎是所有经典web项目的架构). 其中:

  • Model: 操作数据库。
  • Controller: 把每个 "http request" 分发到对应的 "Action( method)"来处理
  • View: 显示 HTML 页面。

所以,我们用一个例子来说明, view在哪里建立,在什么时候渲染:

1.小王同学在浏览器端,输入了一个网址: http://server.com/fruits/new ,回车。(这会产生一个 "http request" , 请求方式是 GET)

2."http request" 从浏览器,发送到服务器端(server.com)之后,
Rails就会 把这个请求交给 router 来处理。

(接下来的事儿,都发生在 服务器端)

3.router根据配置文件: config/routes.rb 中的配置:


Rails.application.routes.draw do
  resources :fruits # 根据这个路由配置
end

把这个request,分发到: fruits controller 中的 new action.

4.new action 做一些 处理, 显示对应的 erb .


# 下面是 app/controllers/fruits_controller.rb 的内容: 
class FruitsController < ApplicationController
  def new
    @hello = 'hellow, Rails!'
    # 啥也不写,就直接渲染对应的 erb页面: 
    #  app/views/fruits/new.html.erb
  end
end
  1. 然后, 上面的 new action 执行完, 会自动渲染 new.html.erb这个文件( 文件路径: app/views/books/new.html.erb )
    (为什么PHP 很好入门? 就是因为,PHP 上来就让你写这个)

<% [1,2,3].each do e %>
  <%= e %> <br/>
<% end %>

上面的视图文件会被渲染成:


1 <br/> 2<br/> 3<br/>

(为什么PHP 入了门之后,就发现 到处都是坑? 就是因为PHP
中, 只有这个View(如果不使用框架的话).
同理, JSP, ASP 稍微好点,但是也是一样。)

基本概念讲完了,就是这么简单.

恰当的使用 @变量

大家记得, 任何 实例变量 (@name 这样的), 都用于定义在controller中,然后在 view中被调用.

Partial (片段)

有时候,如果某个erb文件, 过于复杂了。 例如: 20行。

或者, 某些代码可以重用。

我们就用 Partial 来简化我们的代码,提取出公共的部分.

不带参数的partial

例如:


<!-- 下面这段是版权声明,多个页面都需要重用  -->
<footer>
  copyright@2016 xx.co.ltd
</footer>

那么就把它写成一个 partial (片段)

全名是: app/views/fruits/_footer.html.erb(注意,文件名以 "_"开头)

然后,我们就可以在对应的 erb文件中:


<%= render :partial => 'footer' %> 

注意: 上面的调用中, 直接使用了 'footer', 而不是 '_footer.html.erb' .这也是Rails的惯例.

带参数的partial

如果,某个partial ,是需要参数的,(例如: 年份是个变量)


<!-- 下面这段是版权声明,多个页面都需要重用  -->
<footer>
  copyright@ <%= year %>xx.co.ltd
</footer>

那么,在调用时,就:


<%= render :partial => 'footer', :locals => {:year => 2016} %>

可以看到, 使用了 locals 来传递参数.

不用学的

其他的没讲到的,都不用学。实战中根本用不到. 或者只是增加了复杂性 . 例如:


render 'filename'
render xxx,  :collection ...
render xxx,  :as ...
render xxx,  :object ...
课程的作业

在一个视图中:

  1. 显示当前时间
  2. 在controller中定义一个变量, 然后把它在view中显示出来.
  3. 定义一个partial, 然后在view中调用它.
本节示例代码

本节中的例子,对应的源代码,可以来这里下载: https://github.com/sg552/rails_lesson_3_view

点击查看更多内容
8人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
421
获赞与收藏
3786

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消