Ruby on Rails中表单提交旁边出现的简单表单错误消息

时间:2016-04-19 14:55:46

标签: css ruby-on-rails forms haml simple-form

我正在处理表单,而且表单提交时遇到问题。如果用户弄乱或跳过其中一个条目,则会在页面顶部呈现所有错误消息。我想知道我是否可以让他们在每次提交旁边进行渲染?

我的控制器看起来像

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;
}

1 个答案:

答案 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)} %>