首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不使用Rails中的资源(action :new,: create )的情况下创建表单?

在不使用Rails中的资源(如action :new,:create)的情况下创建表单,你可以手动编写HTML表单,并通过控制器处理表单提交的数据。以下是一个基本的示例,展示了如何实现这一点:

1. 创建HTML表单

首先,在你的视图文件中(例如 app/views/users/new.html.erb),手动编写一个HTML表单:

代码语言:txt
复制
<!-- app/views/users/new.html.erb -->
<h1>Create a New User</h1>

<%= form_with url: users_path, method: 'post', local: true do |form| %>
  <div>
    <%= form.label :name %>
    <%= form.text_field :name %>
  </div>

  <div>
    <%= form.label :email %>
    <%= form.email_field :email %>
  </div>

  <div>
    <%= form.submit 'Create User' %>
  </div>
<% end %>

2. 设置路由

确保你的路由文件(例如 config/routes.rb)中有相应的路由来处理表单提交:

代码语言:txt
复制
# config/routes.rb
Rails.application.routes.draw do
  post '/users', to: 'users#create'
end

3. 创建控制器动作

在你的控制器中(例如 app/controllers/users_controller.rb),添加一个 create 动作来处理表单提交的数据:

代码语言:txt
复制
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def new
    # 这里可以初始化一些数据,如果需要的话
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to @user, notice: 'User was successfully created.'
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :email)
  end
end

4. 创建模型(如果还没有)

确保你有一个 User 模型:

代码语言:txt
复制
# app/models/user.rb
class User < ApplicationRecord
  validates :name, presence: true
  validates :email, presence: true, format: { with: URI::MailTo::EMAIL_REGEXP }
end

5. 创建数据库表

运行迁移来创建 users 表:

代码语言:txt
复制
rails db:migrate

解释

  1. HTML表单:使用 form_with 辅助方法生成一个POST请求的表单,指向 /users 路径。
  2. 路由:定义了一个POST请求的路由,指向 UsersControllercreate 动作。
  3. 控制器动作new 动作用于显示表单,create 动作用于处理表单提交的数据并保存新用户。
  4. 模型验证:在 User 模型中添加了一些基本的验证,确保 nameemail 字段不为空,并且 email 格式正确。

通过这种方式,你可以完全控制表单的生成和处理过程,而不依赖于Rails的资源路由和默认动作。

相关搜索:使用package_create中的Python调用创建包含资源的包如何在不使用Javascript的情况下在Rails中创建注销按钮?为什么在使用new/save而不是create时,has_many到的连接表没有在rails中创建?在Rails中,如何在没有仍然创建正确"for"属性的符号的情况下生成表单标签?如何在不使用New-Item的情况下创建Symlink (Powershell 3.0)如何在不丢失功能的情况下重写backpack-for-laravel中的action方法如何在rails简单表单中创建字段集内的div如何在API中不暴露Rc的情况下共享资源?如何在不覆盖C#样式的情况下创建子菜单表单BindingList?如何在不使用django admin中的模型的情况下创建带有表单的页面?如何在注册表单中不添加多余代码的情况下创建自定义表单所需的错误文本?如何在rails 3.1.0中使用嵌套资源列出索引中的ALL?如何在不更新bundler/rails版本的情况下使用bundler 1.15.4和rails 2.2.4安装annotate gem?如何在不返回视图的情况下在asp.net中验证表单?如何在不创建新列的情况下替换spotfire中的零如何在rails中不键入关联中的每个模型的情况下遍历嵌套关联如何在不创建嵌套列表的情况下在erlang中连接列表?如何在Ruby on Rails中不使用按钮的表单上进行验证?如何在没有外部模块的情况下使用nodejs成功创建简单表单Django中的两个表单-如何在不填满所有字段的情况下使表单可提交?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券