Rails上的自定义错误消息未显示 - 默认显示“无效”

时间:2013-04-04 07:01:58

标签: ruby-on-rails

在我的模型中,我有一个简单的验证:

class Post
    validate :max_tag_limit, if: :tags

    private
    def max_tag_limit
        errors[:tags] << "You can only have maximum of 3 tags") if tags.count > 3
    end
end

控制器将错误消息添加到闪存中,如下所示:

  if !@post.save
     content = "Something went wrong - "
     @post.errors.full_messages.each { |msg| content += "#{msg} : " }
     flash[:error] = content
  end

我在ApplicationHelper模块中使用这个帮助函数显示我的错误消息:

  def flash_display
    response = ""
    flash.each do |name, msg|
      response = response + content_tag(:div, msg, :id => "flash_#{name}")
    end
    flash.discard
    response
  end

我通过js插入消息,如下所示:

// add the flash message
$('#flash').html("<%= escape_javascript raw(flash_display) %>");

但我不能为我的生活理解为什么Rails拒绝显示我的自定义错误消息:“你最多只能有3个标签”。相反,它显示了相当冷的非人类信息: “标签无效:”。

我做错了什么人?救命啊!

编辑:调试显示更多信息,这应该有望缩小我的问题。

 @post.errors.full_messages 

这仅包含每个标记的“无效”消息。我想这意味着我在模型中添加的消息显然没有被拾取(或存储在错误的位置)

1 个答案:

答案 0 :(得分:1)

似乎您应该使用errors[:base]代替errors[:tags]

class Post
  validate :max_tag_limit, if: :tags

  private

  def max_tag_limit
    errors[:base] << "You can only have maximum of 3 tags" if tags.count > 3
  end
end

如果您没有重定向,则不应该使用闪光灯。