初探Rails:构建动态Web应用
发布时间: 2025-08-17 02:27:03 阅读量: 1 订阅数: 4 

# 初探 Rails:构建动态 Web 应用
## 1. 开启 Rails 之旅
在尝试新系统时,编写一个 “Hello, World!” 程序似乎是必经之路。我们将创建一个简单的 Rails 应用,向浏览器发送友好的问候语,随后为其添加当前时间和页面链接。
Rails 是一个模型 - 视图 - 控制器(MVC)框架。它接收来自浏览器的请求,解析请求以找到对应的控制器,并调用该控制器中的动作方法。控制器再调用特定的视图,将结果展示给用户。Rails 会处理大部分连接这些操作的内部工作。
### 1.1 创建控制器
我们可以使用 `rails generate` 命令为项目创建新的控制器。在 `demo` 目录下运行以下命令,创建一个名为 `say` 的控制器,并指定它支持的动作:
```plaintext
demo> bin/rails generate controller Say hello goodbye
Running via Spring preloader in process 2503
create app/controllers/say_controller.rb
route get 'say/hello'
get 'say/goodbye'
invoke erb
create app/views/say
create app/views/say/hello.html.erb
create app/views/say/goodbye.html.erb
invoke test_unit
create test/controllers/say_controller_test.rb
invoke helper
create app/helpers/say_helper.rb
invoke test_unit
invoke assets
invoke scss
create app/assets/stylesheets/say.scss
```
这个命令会记录它检查的文件和目录,当向应用添加新的 Ruby 脚本或目录时会进行标注。我们首先关注的是控制器文件 `app/controllers/say_controller.rb`,其内容如下:
```ruby
class SayController < ApplicationController
def hello
end
def goodbye
end
end
```
`SayController` 类继承自 `ApplicationController`,自动获得默认的控制器行为。目前,这些动作方法为空,要理解它们的命名方式,需要了解 Rails 处理请求的方式。
### 1.2 Rails 与请求 URL
和其他 Web 应用一样,Rails 应用与一个 URL 相关联。当在浏览器中访问该 URL 时,就与应用代码进行交互,代码会生成响应。
在浏览器中访问 `http://localhost:3000/say/hello`,我们可以看到已经将 URL 与控制器连接起来,同时 Rails 也指引我们下一步要做的事情,即告诉 Rails 要显示的内容,这就涉及到视图。
### 1.3 第一个动作与视图
运行创建新控制器的脚本时,会为应用添加多个文件和一个新目录,该目录包含控制器视图的模板文件。在我们的例子中,创建了名为 `say` 的控制器,视图文件位于 `app/views/say` 目录下。
默认情况下,Rails 会查找与正在处理的动作同名的模板文件。因此,我们需要在 `app/views/say` 目录下的 `hello.html.erb` 文件中添加一些基本的 HTML 代码:
```erb
<h1>Hello from Rails!</h1>
```
保存 `hello.html.erb` 文件并刷新浏览器窗口,就能看到友好的问候语。
在 Rails 应用中,控制器文件存放在 `app/controllers` 目录,视图文件存放在 `app/views` 的子目录中,结构如下:
```mermaid
graph LR
A[Rails 应用] --> B[app]
B --> C[controllers]
B --> D[views]
C --> E[say_controller.rb]
D --> F[say]
F --> G[hello.html.erb]
F --> H[goodbye.html.erb]
```
## 2. 让应用动态起来
目前,我们的 Rails 应用只能显示静态页面,为了让它更具动态性,我们让它在每次显示页面时展示当前时间。
### 2.1 动态内容与 ERB
在 Rails 中,可以通过多种方式创建动态模板,最常见的是在模板中嵌入 Ruby 代码。模板文件以 `.html.erb` 结尾,这告诉 Rails 使用 ERB 系统扩展文件内容。
ERB 是 Rails 安装的一部分,它接收一个 `.erb` 文件并输出转换后的版本。普通内容会原样通过,而 `<%=` 和 `%>` 之间的内容会被解释为 Ruby 代码并执行,执行结果会转换为字符串并替换 `<%=…%>` 序列。
修改 `hello.html.erb` 文件以显示当前时间:
```erb
<h1>Hello from Rails!</h1>
<p>
It is now <%= Time.now %>
</p>
```
刷新浏览器窗口,就能看到以 Ruby 标准格式显示的时间,并且每次刷新都会更新。
### 2.2 开发便利性与性能权衡
在开发过程中,我们会发现添加代码时无需重启应用,每次更改都能在浏览器中即时生效。这是因为 Rails 调度器在开发模式下会在新请求到来时自动重新加载应用源文件。
不过,这种灵活性也有代价,输入 URL 后应用响应会有短暂延迟,这是调度器重新加载内容导致的。在开发中这是值得的,但在生产环境中不可接受,因此该功能在生产部署时会被禁用。
### 2.3 时间的处理
最初的问题是向应用用户显示时间,我们已经知道如何让应用显示动态数据,接下来要解决的是获取时间的问题。
之前在 `hello.html.erb` 模板中嵌入 `Time.now` 方法调用是可行的,但一
0
0
相关推荐









