在我的模型中,我有一个简单的验证:
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
这仅包含每个标记的“无效”消息。我想这意味着我在模型中添加的消息显然没有被拾取(或存储在错误的位置)
答案 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
如果您没有重定向,则不应该使用闪光灯。