Rails:如何显示没有型号名称,关联名称的错误消息

时间:2016-04-19 13:21:52

标签: ruby-on-rails ruby-on-rails-4

我想显示没有型号名称,关联名称的错误消息。

例如,显示以下错误

Rooms events base To time must be after from tim

但我只想显示To time must be after from time

我的模型中的验证如下;

validate do |e|
  if e.start_at.present? && e.end_at.present? and e.start_at > e.end_at
    errors[:base] << "To time must be after from time"
  end
end

如果您能告诉我如何仅显示To time must be after from time

,将不胜感激

application.html.erb

    <% flash.each do |message_type, message| %>
      <%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
    <% end %>

解决!

当我在en.yml

中设置以下内容时,它会起作用
en:
  errors:
    format: "%{message}"

2 个答案:

答案 0 :(得分:0)

在application.html上面添加以下内容

<% flash.each do |key, value| %>
      <div class="alert alert-<%= key %>"><%= value %></div>
<% end %>

答案 1 :(得分:0)

errors是一个哈希值。键是字段名称或:base的名称,值是错误消息的数组作为字符串。

散列上的

values将返回没有键的值数组。因为此散列中的值是一个数组,所以我们最终得到一个数组数组:[['To time must be after from time']]

我使用flatten将所有嵌套数组压缩到单个顶级数组。

join("\n")将所有数组元素连接成一个字符串,用换行符分隔。

把它们放在一起就可以得到这样的结果:

flash[:error] = @object.errors.values.flatten.join("\n")

http://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-values