在我的模型中,我有一个简单的验证,如下所示:
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
这仅包含我的每个标签的“无效”消息。我想这意味着我在模型中添加的消息显然没有被拾取(或存储在错误的位置)