我正在处理表单,而且表单提交时遇到问题。如果用户弄乱或跳过其中一个条目,则会在页面顶部呈现所有错误消息。我想知道我是否可以让他们在每次提交旁边进行渲染?
我的控制器看起来像
def new
@form_submission ||= FormSubmission.new
end
def create
@form_submission = FormSubmission.new(form_submission_params)
if @form_submission.save
redirect_to thank_you_path
else
render :new
end
end
我的观点看起来像
.field
= f.label :first_name, required: false, class: "font required-field"
= f.text_field :first_name, :required => "", class: "stretch test"
和我的CSS
.font{
vertical-align: text-bottom;
font-size: 15px;
font-weight: bold;
font-family: "Helvetica Neue";
height: 15px;
}
.required-field::before{
content: ' *';
float: right;
color: red;
padding-left: 5px;
}
.test:valid{
border: 1px solid #00aeef;
}
.test:invalid{
border: 1px solid red;
}
答案 0 :(得分:6)
每个模型都会定义一个错误哈希定义,由模型的每个属性的错误组成。您可以在视图中执行@form_submission.errors.full_messages_for(:first_name)
之类的操作,仅针对一个属性访问错误,在此示例中为first_name
模型的@form_submission
属性的错误。
我通常会为表单错误创建一个部分错误,看起来像这样
<% unless errors.nil? %>
<div class="error-explanation">
<ul class="list-unstyled">
<% errors.each do |error| %>
<li><%= error %></li>
<% end %>
</ul>
</div>
<% end %>
然后为表单中的每个字段访问
<%= render partial: 'shared/form_error', locals: {errors: @form_submission.errors.full_messages_for(:body)} %>