我正在开发一个Rails项目,我想在它上面实现表单验证。当客户端和/或服务器端验证失败时,我想使用之前用户输入的值自动填充表单字段并指向那些不正确的字段。
我正在尝试实现的是创建Model ValidForm并使用验证进行客户端验证。我应该如何继续自动填充表单字段并跟踪导致表单验证失败的原因。同样在这种形式中,我必须上传一个需要在服务器端进行验证的文件。
我是Rails的初学者,所以请指出我正确的方向来实现它。
答案 0 :(得分:0)
下面是一个非常一般的示例,用于创建一个显示验证错误的表单,同时保留输入值。在此示例中,假设我们已经设置了Post
模型:
应用/控制器/ posts_controller.rb:强>
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
flash[:success] = "Post was created!"
redirect_to posts_path
else
flash[:error] = "Post could not be saved!"
# The 'new' template is rendered below, and the fields should
# be pre-filled with what the user already had before
# validation failed, since the @post object is populated via form params
render :new
end
end
private
def post_params
params.require(:post).permit(:title, :body)
end
end
应用/视图/帖/ new.html.erb:强>
<!-- Lists post errors on template render, if errors exist -->
<% if @post.errors.any? %>
<h3><%= flash[:error] %></h3>
<ul>
<% @post.errors.full_messages.each do |message| %>
<li>
<%= message %>
</li>
<% end %>
<% end %>
<%= form_for @post, html: {multipart: true} |f| %>
<%= f.label :title %>
<%= f.text_field :title, placeholder: "Title goes here" %>
<%= f.label :body %>
<%= f.text_area :body, placeholder: "Some text goes here" %>
<%= f.submit "Save" %>
<% end %>
以上是一个基本设置,可以向用户显示哪些字段验证失败,同时在呈现模板时保留输入字段值。有大量的库可以帮助您的表单看起来/表现更好 - 这里有两个流行的选项:
客户端验证还有一个有用的RailsCasts screencast。
RailsGuides在ActiveRecord(模型)验证方面有很多文档。
希望这有帮助!