Web设计的Ruby on Rails 第2章 变量、数组、散列表

http://cn.oiax.jp/rails/for_web_designers/variables_and_objects.html

第2章 变量、数组、散列表

这章将对生成一个变量并嵌入模板,以及 HTML 数据生成的方法进行说明。

请看下面的 Ruby 程序。

@title = '新闻发布'

这是实例变量定义的例子。特征是以符号(@)开头。实例变量的值,可以像下面一样嵌入到模板中。

<h1><%= @title %></h1>

把这个和开头的程序结合在一起,便可生成下面的 HTML 代码。

<h1>新闻发布</h1>

Ruby on Rails 中,嵌入实例变量并从模板中生成 HTML 代码,叫做渲染。定义渲染中实例变量的程序叫做动作

再回过头来看一下开头的程序,和其他的编程语言一样,Ruby的字符串包含在单引号或双引号中。但Ruby句末没有必要加上特别的终端符号。这和Java、 Perl、 PHP等语言用冒号结句不同。但是Ruby也可以用冒号划分句子。

@title = '社长致辞'; @subtitle = '公司经营理念'

那么,试试用数组做更复杂一点的东西吧。

数组(Array)就是对象的集合。我们还没有对“对象”进行说明,这里就换个说法叫数据吧。数组的特征,是其内部的对象被排序,可以凭借编号(标签)选取。

下面这个 Ruby 程序,在实例变量 @principles 中存储字符串的数组。

@principles = ['自律', '和谐', '变革']

Ruby中,用大括号定义数组。数组的各个元素间用逗号隔开。要选取指定元素,就在变量名后面把指定元素的编号用大括号括住。下面的 Ruby 代码返回‘自律’的字符串。请注意数组的编号是从 0 开始的。

@principles[0]

下面的例子试着将 @principles 的各个元素嵌入到模板。

<ol>

<% @principles.each do |p| -%>

 <li><%= p %></li>

<% end -%>

</ol>

这里使用了数组方法each。关于“方法”的说明相当冗长,我们把它放到后面。这里把数组的元素一个个地代到局部变量p 中,并重复 doend 的操作。局部变量是在某个小范围内一次性使用的变量。渲染这个模板,产生以下结果。

<ol>
  <li>自律</li>
  <li>和谐</li>
  <li>变革</li>
</ol>

仔细比较 Ruby 程序、模板和产生的 HTML 代码,当然首先是要直观地掌握。

再看一下模板。

最明显的是 <% ... %> 这样的结构。这个结构在最开始看见的模板里也出现过,但是在这次的模板里,有些类型在 <% 后面没有等号(=)。不管是哪一种情况,<%%> 之间都是作为 Ruby 代码解析。顺便说一下,所谓解析,是指运行程序并得到结果的意思。有等号的时候,嵌入得到的值,反之就不嵌入。

还有一个,有些类型在 %> 后面有减号(-),有些又没有。这个减号表示删去 %> 后面的换行符。没有减号的情况下,在生成的 HTML 代码的 ol 元素里另外插入一个空行。虽说不管有没有空行对浏览器上的显示没有影响,但这是为了尽量让最后的 HTML 代码简洁。

接下来要注意的是 Ruby 的独特记法,用竖线(|)圈住局部变量。看下面的例子。

<div>
<% 4.times do |i| -%>
  <%= i + 1 %><br />
<% end -%>
</div>

渲染后得到如下结果。

<div>
  1<br />
  2<br />
  3<br />
  4<br />
</div>

eachtimes 这样的方法后面, doend 之间的 Ruby 代码叫代码块。整数对象的方法 times 具有向代码块传递 0 到 该整数对象值 -1 的整数值,并再次解释执行代码块的功能。两根竖线间表示的就是向代码块传递的值,即参数。(对整数是对象并且具有方法感到吃惊的人尽情地享受这样的乐趣吧。)

之后我们来尝试一下散列表

散列表也叫关联数组,在对象的集合这一点上与数组是相同的。不同点有2个。一是在各个元素间没有顺序。二是各个元素被赋予关键字。请看下面的 Ruby 程序。

@boss = { 'name' => '山田太郎', 'age' => 58, 'title' => '董事长' }

实例变量 @boss 中包含了散列表。这个散列表的对象有三个。此外,关键字是“name”,值是“山田太郎”。再次提醒一下,散列表各个元素间是没有顺序的。

散列表用大括号表示。元素间用逗号隔开,关键字和值用 => 连接。

选取值的写法和数组相似。但是在大括号中指定的是元素的关键字而不是编号。下面就继续对使用散列表的模板及其渲染结果进行说明。

<table>
  <tr><th>职务</th><td><%= @boss['title'] %></td></tr>
  <tr><th>姓名</th><td><%= @boss['name'] %></td></tr>
  <tr><th>年龄</th><td><%= @boss['age'] %></td></tr>
</table>
<table>
  <tr><th>职务</th><td>董事长</td></tr>
  <tr><th>姓名</th><td>山田太郎</td></tr>
  <tr><th>年龄</th><td>58</td></tr>
</table>