1

在我的模型中,我有一个简单的验证,如下所示:

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 

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

4

1 回答 1

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

如果你不重定向,你不应该使用闪光灯。

于 2013-04-04T12:02:30.680 回答