Jupyter AI

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

📅 发表日期: 2024年8月15日

分类: 🌟Rails 入门

👁️阅读: --

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

前置条件

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

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

路由设置

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

Rails.application.routes.draw do
  resources :posts
end

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

控制器设置

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

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 文件中,您有类似以下的表单代码:

<%= 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

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

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

🌟Rails 入门 (滚动鼠标查看)