2016-04-19 20 views
2

我正在处理表单,而且我在表单提交时遇到了问题。如果用户混淆或跳过其中一个条目,则所有错误消息都会呈现在页面的顶部。我想知道是否可以让它们在每个提交旁边呈现?简单的表单错误消息出现在Ruby on Rails中的表单提交旁边

我的控制器看起来像

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

回答

6

每个模型都将有散列定义的错误,由针对模型的每个属性的错误。您可以在您的视图中执行类似@form_submission.errors.full_messages_for(:first_name)的操作,以访问仅针对一个属性的错误,在此示例中为@form_submission模型的first_name属性的错误。

我通常会创建一个部分为形式的错误,看起来像这样

<% 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)} %> 
+0

我认为这是一个真棒!解决方案但是我不断发现自己得到了一个错误消息,在'undefined method'错误'中声明为零:NilClass' – kdweber89

+0

您应该使用'@ form_submission'作为本地而不是'@ post' @ kdweber89。 –

+0

是的,我正在使用@post作为示例,但我会进行更新,以便它适用于您的配置。 – Justin