如何摆脱出现在我的Rails模型错误消息周围的括号?

时间:2017-01-03 14:54:38

标签: ruby-on-rails validation model ruby-on-rails-5

我正在使用Rails 5.在我的模型中,如果我的某个字段无效,我会设置错误...

errors.add(:my_field, 'The field is not in the correct format')

然后在我看来,我会像这样显示错误......

<% if !@user.errors[:my_field].empty? %><span class="profileError"> <%= @user.errors[:my_field] %></span><% end %>  

显示错误时,显示为

["The field is not in the correct format"]

如何摆脱错误周围出现的括号?这似乎是一个非常简单的问题,但我不知道那些东西是如何在那里蔓延的。

2 个答案:

答案 0 :(得分:2)

@user.errors[:my_field]是一组错误消息。

要显示所有错误,您可以执行...

@user.errors[:my_field].join(', ')

这将显示您所期望的单个错误,以及用逗号分隔的多个错误。

e.g。

['not an integer', 'not less than ten']

变为

not an integer, not less than ten

['not an integer']

变为

not an integer

答案 1 :(得分:1)

在Rails中,任何给定属性的错误都是一个数组,因为属性可能会失败多次验证。

通常使用@user.errors.full_messages然后迭代所有错误消息:

<% if @user.errors.any? %>
<ul>
  <%= @user.errors.full_messages.each do |m| %>
  <li><%= m %></li> 
  <% end %>
</ul>
<% end %>

在您的情况下,您可以迭代特定的密钥:

<% @user.errors[:my_field].each do |msg| %>
  <span class="profileError"><%= msg %></span>
<% end if @user.errors[:my_field].any? %>

根据所需的输出,您也可以使用full_messages_for(:my_field)。有关更多示例,请参阅ActiveModel::Errors的文档。