Jupyter AI

23 表单处理之创建表单

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

分类: 🌟Rails 入门

👁️阅读: --

在前一章中,我们讨论了如何在 Rails 应用程序中使用部分视图和布局来构建优雅的页面结构。这一节的重点是如何创建和处理表单,特别是在用户需要输入数据时。表单是 web 应用中与用户交互的重要部分,是获取用户输入并进行处理的主要途径。

创建表单

基本的表单生成

在 Rails 中,生成表单非常简单。我们可以使用 Rails 提供的表单辅助方法来创建。假设我们正在构建一个简单的博客应用,用户可以创建新的博客文章。我们将会创建一个表单,用于输入文章的标题和内容。

首先,我们需要生成一个文章模型。如果你还没有创建模型,可以使用以下命令:

rails generate model Article title:string content:text
rails db:migrate

接下来,在 articles_controller.rb 中,我们需要添加一个 new 方法来渲染创建表单。

class ArticlesController < ApplicationController
  def new
    @article = Article.new
  end

  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to @article, notice: 'Article was successfully created.'
    else
      render :new
    end
  end

  private

  def article_params
    params.require(:article).permit(:title, :content)
  end
end

在这个代码片段中,new 方法初始化了一个新的文章对象,而 create 方法则处理了表单提交。

创建视图文件

现在,我们需要创建一个视图文件来显示这个表单。在 app/views/articles 目录中,创建一个名为 new.html.erb 的文件。

<%= form_with model: @article, local: true do |form| %>
  <% if @article.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved:</h2>
      <ul>
        <% @article.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 辅助方法来生成表单。form_with 会自动关联我们的文章模型,并根据模型的属性生成相应的输入字段。

表单各部分的解释

  • form.label: 用于生成标签,方便用户理解输入框是干什么的。
  • form.text_field: 创建一个文本输入框,用于输入标题。
  • form.text_area: 创建一个文本区域,适合输入内容。
  • form.submit: 生成一个提交按钮。

通过这样的结构,当用户提交表单时,会触发 create 方法,数据会被检查并保存到数据库中。如果存在错误,用户将看到错误消息并能够修正这些错误。

小结

本章介绍了如何在 Rails 中创建表单,步入用户输入数据的流程。我们学习了如何使用 form_with 方法生成表单,并在表单中添加错误处理机制,为用户提供良好的交互体验。

接下来,我们将在下一章中讨论如何处理表单提交,解析用户输入的数据,并实现相应的业务逻辑。确保您已经理解了表单的创建,这对于处理用户交互至关重要。

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