在这种情况下,如何创建更有意义的错误消息?

时间:2009-07-25 19:03:14

标签: ruby-on-rails

说我有以下型号:

class Information < ActiveRecord::Base
...
validates_length_of :name, :minimum=>3, :message=>"should be longer than 3 characters!"
...

我想要的错误是:
信息应超过3个字符!(或类似)
“信息名称应该超过3个字符!”

我看过两种可能的解决方法:

  1. human_attribute_name方法(提到here):不适用于我的Rails 2.3.2。: - (
  2. 直接执行information.errors.add "","..." if information.name.length < 3但是,这会删除由validated_length_of方法触发的许多有用属性,例如特殊的类标记(用于将内容着色为红色)。 < / LI>

    有什么想法吗?谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

我认为您通过 full_messages 方法显示错误,该方法适用于控制台,而不是用于Web应用程序。您应该使用 error_message_on error_messages_for 帮助程序(有关详细信息,请参阅documentation),这样您就可以自定义错误消息。

示例:

<%= error_message_on "information", "name", :prepend_text => 'Information ' %>

答案 1 :(得分:1)

不要使用rails helper来产生错误,通常我会有内联错误,例如:

def inline_error_block(obj, meth, prepend="", append="", klass="error error-form", &block)
  content = capture(&block)
  obj = (obj.respond_to?(:errors) ? obj : instance_variable_get("@#{obj}"))
  if obj
    errors = obj.errors.on(meth.to_s)
    if errors
      output = content_tag(:div, :class => klass) do
        content_tag(:p, "#{prepend}#{errors.is_a?(Array) ? errors.first : errors}#{append}", :class => "error-msg clearfix") + content
      end
      return concat(output)
    end
  end
  concat(content_tag(:div, content, :class => "no-error"))
end

倾向于做这个技巧,但是,它只显示每个表单字段一个错误,我确定你可以重新排列它以显示所有,如果你需要! (errors.first to errors.each)。

要获取全名,只需根据需要显示包含字段名称的消息:

validates_length_of :name, :minimum=>3, :message=>"Information should be longer than 3 characters!"

答案 2 :(得分:1)

您始终可以将:message设置为模型中的空字符串,然后将视图中的:prepend_text设置为您喜欢的任何内容。