在不使用Rails中的资源(如action :new,:create)的情况下创建表单,你可以手动编写HTML表单,并通过控制器处理表单提交的数据。以下是一个基本的示例,展示了如何实现这一点:
首先,在你的视图文件中(例如 app/views/users/new.html.erb
),手动编写一个HTML表单:
<!-- 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 %>
确保你的路由文件(例如 config/routes.rb
)中有相应的路由来处理表单提交:
# config/routes.rb
Rails.application.routes.draw do
post '/users', to: 'users#create'
end
在你的控制器中(例如 app/controllers/users_controller.rb
),添加一个 create
动作来处理表单提交的数据:
# 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
确保你有一个 User
模型:
# app/models/user.rb
class User < ApplicationRecord
validates :name, presence: true
validates :email, presence: true, format: { with: URI::MailTo::EMAIL_REGEXP }
end
运行迁移来创建 users
表:
rails db:migrate
form_with
辅助方法生成一个POST请求的表单,指向 /users
路径。UsersController
的 create
动作。new
动作用于显示表单,create
动作用于处理表单提交的数据并保存新用户。User
模型中添加了一些基本的验证,确保 name
和 email
字段不为空,并且 email
格式正确。通过这种方式,你可以完全控制表单的生成和处理过程,而不依赖于Rails的资源路由和默认动作。
领取专属 10元无门槛券
手把手带您无忧上云