24 表单处理之处理表单提交的内容

在 Ruby on Rails 中,处理表单提交的内容是 Web 应用程序的核心功能之一。用户通过表单提交的数据可以用来创建、更新或删除数据库中的记录。在本节中,我们将详细探讨如何接收和处理表单数据,以便有效地管理用户交互。

前置条件

在正式开始之前,请确保您已经完成了上一章节的内容:创建表单。我们在这一章节中将承接上一个章节的内容,特别是关于如何生成和展示表单的部分。

假设我们已经有一个简单的 Post 模型,它包含 titlecontent 字段,我们希望用户能够通过表单提交新博客文章。

路由设置

我们需要确保我们的路由设置正确。打开 config/routes.rb 文件,确保有如下内容:

1
2
3
Rails.application.routes.draw do
resources :posts
end

这将为 posts 资源生成标准的 RESTful 路由,包括 new, create, edit, updatedestroy 动作。

控制器设置

接下来,确保我们在 PostsController 中定义了 create 动作。打开 app/controllers/posts_controller.rb 文件,并添加 create 方法。该方法会处理表单数据并将其保存到数据库中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class PostsController < ApplicationController
def new
@post = Post.new
end

def create
@post = Post.new(post_params)

if @post.save
redirect_to @post, notice: 'Post was successfully created.'
else
render :new
end
end

private

def post_params
params.require(:post).permit(:title, :content)
end
end

代码解析

在上面的代码中:

  • new 方法用于初始化一个新的 Post 对象,并将其传递给视图。
  • create 方法用于处理表单的提交。我们通过 Post.new(post_params) 创建一个新的 Post 实例,然后调用 save 方法将其保存到数据库。如果保存成功,通过 redirect_to 方法重定向到新创建的文章页面,并显示成功消息;如果保存失败,则重新渲染表单。

我们还定义了 post_params 方法,该方法使用 params.requirepermit 确保只允许 titlecontent 两个参数,以防止潜在的安全问题。

视图设置

接下来,是实现视图部分。确保在 app/views/posts/new.html.erb 文件中,您有类似以下的表单代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%= form_with(model: @post, local: true) do |form| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

<ul>
<% @post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= form.label :title %>
<%= form.text_field :title %>
</div>

<div class="field">
<%= form.label :content %>
<%= form.text_area :content %>
</div>

<div class="actions">
<%= form.submit %>
</div>
<% end %>

视图代码解析

在这个表单视图中,我们使用了 form_with 生成一个表单,model: @post 表示该表单是为 @post 实例生成的。我们还检查了是否有任何错误,如果有,我们就会展示这些错误信息。

  • 表单包含两个字段:titlecontent,并使用 form.labelform.text_field 来生成相关的输入控件。
  • form.submit 用于生成提交按钮。

总结

在这一节中,我们学习了如何处理用户提交的表单数据。我们创建了一个 PostsController 中的 create 动作,处理从表单提交的数据,并通过 post_params 方法确保我们的应用程序安全地处理数据。最后,我们还编写了一个简单的视图,允许用户输入 titlecontent

通过这些代码,我们已经能够接受用户的输入并将其保存在数据库中。接下来,在下一章节中,我们将讨论表单验证,确保我们的输入数据的合法性和有效性。这将帮助提升用户体验和数据一致性。

在继续之前,请确保您已成功地创建了文章,并且一切运行正常。准备好迎接表单验证的挑战吧!

24 表单处理之处理表单提交的内容

https://zglg.work/rails-zero/24/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论