Rails开发:视图、控制器与高级功能实践
立即解锁
发布时间: 2025-08-20 01:21:00 阅读量: 1 订阅数: 3 


Rails 3入门:从零开始构建Web应用
### Rails开发:视图、控制器与高级功能实践
在Rails开发中,Action Pack是负责控制器和视图的重要库。下面将详细介绍如何处理请求参数、操作控制器和视图,以及如何使用部分模板保持代码简洁。
#### 1. 处理请求参数
请求参数(无论是GET还是POST请求)都可以通过`params`哈希访问。`params`是一个返回`Hash`对象的方法,你可以使用哈希语义来访问它。在Ruby中,哈希类似于数组,但通过任意键进行索引,而数组通过数字索引。
例如,若请求参数中有一个名为`id`的变量,你可以使用`params[:id]`来访问它。以下是一个示例URL及其对应的`params`哈希:
```plaintext
URL: http://localhost:3000/articles?title=rails&body=great
Params: {"title"=>"rails", "body"=>"great"}
```
#### 2. 控制器操作
##### 2.1 创建操作
创建操作是表单提交的目标。以下是`articles_controller.rb`中的`create`方法:
```ruby
# POST /articles
# POST /articles.xml
def create
@article = Article.new(params[:article])
respond_to do |format|
if @article.save
format.html { redirect_to(@article, :notice => 'Article was successfully created.') }
format.xml { render :xml => @article, :status => :created, :location => @article }
else
format.html { render :action => "new" }
format.xml { render :xml => @article.errors, :status => :unprocessable_entity }
end
end
end
```
流程如下:
1. 初始化一个新的`Article`对象,其属性来自`params`哈希,并存储在实例变量`@article`中。
2. 尝试保存对象。
3. 如果保存成功,使用`flash`设置消息并重定向到同一控制器的`show`操作。
4. 如果保存失败,重新渲染`new`操作以修正错误。
##### 2.2 错误消息显示
当表单提交失败时,Rails会自动将验证失败的字段用红色突出显示。HTML源中,输入和标签标签会被带有`fieldWithErrors`类的`div`元素包围。
以下是显示错误消息的代码,位于`app/views/articles/_form.html.erb`中:
```erb
<% if @article.errors.any? %>
<div id="errorExplanation">
<h2><%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved:</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
```
##### 2.3 编辑和更新操作
编辑和更新操作与新建和创建操作类似,主要区别在于不是实例化新的`Article`对象,而是获取现有对象。以下是`articles_controller.rb`中的`update`方法:
```ruby
# PUT /articles/1
# PUT /articles/1.xml
def update
@article = Article.find(params[:id])
respond_to do |format|
if @article.update_attributes(params[:article])
format.html { redirect_to(@article, :notice => 'Article was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @article.errors, :status => :unprocessable_entity }
end
end
end
```
#### 3. 视图处理
新和编辑模板渲染的HTML几乎相同,仅标题和导航略有不同。Rails会根据传递给`form_for`的`@article`变量确定使用的请求方法。
以下是`new.html.erb`和`edit.html.erb`的示例代码:
```erb
<!-- new.html.erb -->
<h1>New article</h1>
<%= render 'form' %>
<%= link_to 'Back', articles_path %>
<!-- edit.html.erb -->
<h1>Editing article</h1>
<%= render 'form' %>
<%= link_to 'Show', @article %> |
<%= link_to 'Back', articles_path %>
```
#### 4. 部分模板的使用
部分模板(Partials)有助于减少代码重复并保持代码组织良好。它们遵循以下命名约定:以下划线开头,与标准模板区分开来。
##### 4.1 渲染部分模板
在渲染部分模板时,不需要包含前导下划线。例如:
```erb
<%=
```
0
0
复制全文
相关推荐










