创建控制器
如前所述,控制器(Controller)是你的大部分 Ruby 代码所在的位置。它是应用程序中视图(View,浏览器中显示的内容)和模型(Model,数据发生了什么改变)之间的一部分。这是一个 “Hello world” 应用程序,让我们创建一个控制器来说 “hello”。本着原创的精神,我将其称为 SayHello 控制器。再一次,你可以通过在系统提示符下运行脚本来创建它。你需要在先前运行服务器脚本的目录中打开另一个命令窗口(例如,C\railsapps\helloworld)。你无法重新使用现有的命令窗口,因为该命令窗口正在运行服务器,你需要将其关闭以返回到提示符 - 这将阻止我们的 Rails 应用程序工作!
在提示符下输入这个(使用 SayHello 的首字母大写方式,如下所示):
ruby script/generate controller SayHello
片刻之后,你将被告知已创建以下文件和目录(该脚本还将告诉你某些目录已存在且因此未创建):
app/views/say_hello
app/controllers/say_hello_controller.rb
test/functional/say_hello_controller_test.rb
app/helpers/say_hello_helper.rb
注意 Rails 如何将名称 SayHello 解析成两个小写的单词,say 和 hello,并用下划线分隔,它使用这个名字作为三个独立的 Ruby 文件的第一部分。这只是 Rails 使用的“按惯例配置”方法的一个示例。
这里的 Ruby 文件 say_hello_controller_test.rb 和 say_hello_helper.rb 作为存储库提供(如果你愿意),分别用于测试和实用程序(’helper’)代码。但更重要的是控制器文件本身 say_hello_controller.rb,它是在 \helloworld\app\controllers 中创建的。在文本编辑器中打开此文件。这个空方法已自动生成:
class SayHelloController < ApplicationController
end
在这个类中,我们可以编写一些代码,以便在显示某个页面时执行。编辑类定义以匹配以下内容:
class SayHelloController < ApplicationController
def index
render :text => "Hello world"
end
def bye
render :text => "Bye bye"
end
end
现在包含两个方法,index
和 bye
。每个方法都包含一行代码。尽管我已经省略了括号(许多 Rails 开发人员喜欢使用 bracket-light 风格编码),但你可以推断出 render
是一种以哈希为参数的方法;哈希本身包含一个包含一个由符号和字符串构成的键值对。对于 bracket-lovers ,index
方法可以像这样重写:
def index
render( { :text => "Hello world" } )
end
你有了第一个真正的 Rails 应用程序。要试用它,你需要返回到 Web 浏览器并输入你刚刚编写的两个函数的完整“地址”。但首先你可能需要重新启动服务器。只需在服务器运行的命令窗口中按 CTRL+C。当服务器存在时,输入以下命令重启:
ruby script/server
现在输入一个地址来访问控制器方法。地址采用主机和端口的形式(与你之前输入的相同 - 例如,http://localhost:3000),加上控制器的名称(/say_hello),最后是特定方法的名称(/index 或 /bye)。尝试将这些输入到浏览器的地址字段中,再次确保使用相应的端口号,如果不是 3000:
http://localhost:3000/say_hello/index
http://localhost:3000/say_hello/bye
你的浏览器应分别为每个地址显示 “Hello world” 和 “Bye bye”。如果所有都如期运行,你可以继续阅读“剖析简单 Rails 应用”一节。但是,如果你看到数据库错误,请首先阅读下一节“无法找到数据库?”…