当你写一“视图”时,你就正在写一个“模板”:有时候这将生成最终结果。要理解这
些“模板”是如何工作的,我们需要关心三件事:
1、“模板”在哪儿。
2、它们的运行环境,和
3、它们内部是什么。
“模板”在哪儿
render()方法期望在由全局的template_root 配置选项定义的目录下找到“模板”。缺
省,这被设置为当前应用程序的app/views 目录。在这个目录内,约定是给每个“控制器”
的“视图”一个分离的子目录。例如,我们的Depot 应用程序包含admin 和store“控制器”。结果,我们在app/views/admin 和app/views/store 目录下“模板”。
典型地每个目录都在相应“控制器”内“动作”的后面包含“模板”的名字。
你也可以有在“动作”后面没有名字的“模板”。这些都可以从“控制器”中使用如下
调用被提交
render(:action => 'fake_action_name')
render(:template => 'controller/name)
render(:file => 'dir/template')
例子中最后一个允许你存储“模板”在你的文件系统的任何位置上。如果你想在应用程
序中共享“模板”,这样做很有用。
[color=red]“模板”环境[/color]
“模板”是包含文本和代码混合体。代码用于添加动态的内容给“模板”。代码运行的
环境能让它访问由“控制器”设置的信息。
1、“控制器”的所有实例变量在“模板”内也是有效的。这就是为什么“动作”会传递
数据给“模板”的原因。
2、“控制器”对象的headers, params, request, response, 和session 做为存取器方法在“视图”内也是有效的。通常,“视图”代码或许不应该直接使用这些,同样处理它
们职责应该留给“控制器”。但是在调试时我们会发现这很用处。例如,下面的rhtml“模
板”使用debug()方法来显示request 的内容,parameters 的细节,和当前的response。
<h4>Request</h4> <%= debug(request) %>
<h4>Params</h4> <%= debug(params) %>
<h4>Response</h4> <%= debug(response) %>
3、当前的“控制器”对象可以使用属性名字controller 来访问(包括ActionController
内的方法)。
4、“模板”的基本目录路径在属性base_path 内是有效的。
Rails 支持两种类型的“模板”。
1、rxml “模板”用于Builder 库来构造XML 应答。
2、rhtml “模板”是HTML 和被植入Ruby 的混合体,典型地用于生成HTML 页面。下面
我们简要地看看Builder,然后看rhtml。余下部分是两者的应用。
些“模板”是如何工作的,我们需要关心三件事:
1、“模板”在哪儿。
2、它们的运行环境,和
3、它们内部是什么。
“模板”在哪儿
render()方法期望在由全局的template_root 配置选项定义的目录下找到“模板”。缺
省,这被设置为当前应用程序的app/views 目录。在这个目录内,约定是给每个“控制器”
的“视图”一个分离的子目录。例如,我们的Depot 应用程序包含admin 和store“控制器”。结果,我们在app/views/admin 和app/views/store 目录下“模板”。
典型地每个目录都在相应“控制器”内“动作”的后面包含“模板”的名字。
你也可以有在“动作”后面没有名字的“模板”。这些都可以从“控制器”中使用如下
调用被提交
render(:action => 'fake_action_name')
render(:template => 'controller/name)
render(:file => 'dir/template')
例子中最后一个允许你存储“模板”在你的文件系统的任何位置上。如果你想在应用程
序中共享“模板”,这样做很有用。
[color=red]“模板”环境[/color]
“模板”是包含文本和代码混合体。代码用于添加动态的内容给“模板”。代码运行的
环境能让它访问由“控制器”设置的信息。
1、“控制器”的所有实例变量在“模板”内也是有效的。这就是为什么“动作”会传递
数据给“模板”的原因。
2、“控制器”对象的headers, params, request, response, 和session 做为存取器方法在“视图”内也是有效的。通常,“视图”代码或许不应该直接使用这些,同样处理它
们职责应该留给“控制器”。但是在调试时我们会发现这很用处。例如,下面的rhtml“模
板”使用debug()方法来显示request 的内容,parameters 的细节,和当前的response。
<h4>Request</h4> <%= debug(request) %>
<h4>Params</h4> <%= debug(params) %>
<h4>Response</h4> <%= debug(response) %>
3、当前的“控制器”对象可以使用属性名字controller 来访问(包括ActionController
内的方法)。
4、“模板”的基本目录路径在属性base_path 内是有效的。
Rails 支持两种类型的“模板”。
1、rxml “模板”用于Builder 库来构造XML 应答。
2、rhtml “模板”是HTML 和被植入Ruby 的混合体,典型地用于生成HTML 页面。下面
我们简要地看看Builder,然后看rhtml。余下部分是两者的应用。