推荐答案
在 Ruby on Rails 中,表单处理通常通过 form_with 或 form_for 辅助方法来创建表单,并通过控制器中的 params 对象来处理表单提交的数据。以下是一个简单的示例:
// www.javascriptcn.com code example
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render :new
end
end
private
def post_params
params.require(:post).permit(:title, :content)
end
end// www.javascriptcn.com code example
# app/views/posts/new.html.erb
<%= form_with model: @post do |form| %>
<div>
<%= form.label :title %>
<%= form.text_field :title %>
</div>
<div>
<%= form.label :content %>
<%= form.text_area :content %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>本题详细解读
1. 表单创建
在 Rails 中,表单通常使用 form_with 或 form_for 辅助方法来创建。form_with 是 Rails 5.1 引入的,推荐使用它来代替 form_for 和 form_tag。
form_with可以接受一个模型对象作为参数,自动生成对应的表单字段。form_with默认使用 AJAX 提交表单,可以通过local: true选项来禁用 AJAX。
2. 表单提交
表单提交后,数据会通过 HTTP POST 请求发送到服务器。Rails 会自动将表单数据封装在 params 对象中。
params是一个 Hash 对象,包含了所有提交的数据。- 使用
params.require(:model_name).permit(:attribute1, :attribute2)来提取并过滤允许的参数。
3. 控制器处理
在控制器中,通常会定义一个 new 动作来渲染表单,以及一个 create 动作来处理表单提交。
new动作中,通常会初始化一个新的模型对象,用于表单的默认值。create动作中,使用params中的数据创建或更新模型对象,并根据操作结果进行重定向或重新渲染表单。
4. 模型验证
在 create 动作中,通常会调用 save 方法来保存模型对象。如果模型验证失败,save 会返回 false,此时可以重新渲染表单并显示错误信息。
5. 安全性
Rails 提供了强大的安全性机制,如 CSRF 保护、参数过滤等。通过 params.require 和 permit 方法,可以确保只有允许的参数被传递给模型,从而防止恶意数据注入。
通过以上步骤,Rails 提供了一种简洁而强大的方式来处理表单数据,使得开发者可以专注于业务逻辑的实现。