视图在 Rails 中 , 就是 .html.erb 文件 .
每个视图都要由 controller 触发 . 所有的视图文件 , 都放在 :app/views/ 目录下 . 例如 : app/views/books/new.html.erb
最基本用法
最简单的 erb 文件 :<p> 当前时间是 : <%= Time.now %></p>
它会直接被转换成下面的 HTML:
<p> 当前时间是 : <%= Time.now %></p>
<% %> 与 <%= %> 的区别
<% %> 表示仅运行代码 , 例如 : <% a = 1%>
<%= %> 表示 , 不但运行 , 而且把结果渲染到
html 中 . 例如 : <%= Time.now %>
Rails 中的视图在什么时候被渲染
Rails 架构: M - V - C (几乎是所有经典 web
项目的架构) . 其中 :
Model: 操作数据库。
Controller: 把每个 "http request" 分发
到对应的 "Action( method)" 来处理
View: 显示 HTML 页面。
例如:
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 ,分发到:
中的 new action.
fruits controller
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
5. 然后 , 上面的 new action 执行完 , 会自动渲
染 new.html.erb 这个文件 ( 文件路径 :app/views/books/new.html.erb ) <% [1,2,3].each do e %> <%= e %> <br/> <% end %>
上面的视图文件会被渲染成 :1 <br/> 2<br/> 3<br/>
恰当的使用 @ 变量
实例变量 (@name )定义在 controller 中 , 在 view 中被调用 .
Partial ( 片段 )
有时候,如果某个 erb 文件, 过于复杂了。 例如:
20 行。
或者, 某些代码可以重用。
我们就用Partial 来简化我们的代码 , 提取出公共部分
不带参数的 partial
例如 , 原来的 HTML 是 :
<!-- 下面这段是版权声明,多个页面都需要重用 -->
<footer>
copyright@2016 xx.co.ltd
</footer>
那么就把它写成一个
全名是 :
partial ( 片段)
app/views/fruits/_footer.html.erb( 注意,文件名以 "_" 开头 )
● 然后,我们就可以在对应的
● <%= render :partial => 'footer' %>
erb 文件中:
注意 : 上面的调用中 , 直接使用了
'footer', 而不是 '_footer.html.erb' . 这也是 Rails 的惯例 .
带参数的 partial
如果,某个 partial , 是需要参数的,(例如: 年份是个
变量)
<!-- 下面这段是版权声明,多个页面都需要重用 -->
<footer>
copyright@ <%= year %>xx.co.ltd
</footer>
那么,在调用时,就:
<%= render :partial => 'footer', :locals => {:year =>2016} %>
可以看到 , 使用了
locals 来传递参数 .