使用simple_form自定义错误消息



我使用的是simple_form gem。我想定制当用户验证失败时显示的错误消息。我怎样才能做到这一点呢?

  1. 可以声明文件的内容模型中的错误信息:

    validates_length_of :name, :minimum => 5, :message => "blah blah blah"
    
  2. 您可以设置您的idclass错误标记:

    <%= f.input :name, :error_html => { :id => "name_error"} %> 
    
  3. 你可以使用

    <%= f.error :name, :id => "name_error" %>
    

    得到

    <span class="error" id="name_error">is too short (minimum is 5 characters)</span>
    

我不知道simple_form gem是否有任何不同。

对于需要更改的错误消息内容,可以使用模型中的:message属性。

class User < ActiveRecord::Base
  validates :email, {:presence => true, :message => "is not filled up."}
end

现在验证消息将是Email is not filled up。如果您也希望更改字段名(EmailE-mail address之类的),现在的方法是在locales.rb文件中定义它,如下所示

# config/locales/en.yml
en:
  activerecord:
    attributes:
      user:
        email: "E-mail address"

参见locales的详细信息链接。另一种方法是在模型中定义像这样的人性化属性:

class User < ActiveRecord::Base
  validates :email, {:presence => true, :message => "is not filled up."}
  HUMANIZED_ATTRIBUTES = {
    :email => "E-mail address",
    ...(other fields and their humanized names)
    ...
  }
  def self.human_attribute_name(attr, options={})
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super
  end
end

要自定义验证消息的样式,我们必须编辑的样式#errorExplanation.fieldWithErrors,在scaffold.css样式表中。

您可以很容易地更改翻译文件中出现的默认错误消息,该文件位于config/locales/simple_form.en.yml中。

在特定的初始化器config/initializers/simple_form.rb中,您可以否决生成html的默认选项。

希望对你有帮助。

为了完整性,我想补充的是,formtastic是一个更容易的选择,因为它有一个默认的布局。我非常喜欢simple_form,但它不提供任何开箱即用的格式,但这是他们的意图。使用Formtastic很难(不可能)更改生成的html,而使用simple_form可以完全按照自己的喜好塑造生成的html。如果您有一个设计器,并且生成的表单必须生成相同的html,那么这一点尤其有用。所以,如果你刚开始使用,formtastic会让你更快地获得更好的效果。还要注意,切换非常容易,因为语法几乎是相同的。

这里解释了另一种在答案中没有提到的解决方案。您可以在表单本身中直接覆盖视图中的错误消息。例如:

<%= f.input :last_name,
               placeholder: 'last_name',
               error: 'This is a custom error message',
               required: true,
               class: 'form-field',
               autofocus: true,
               input_html: { autocomplete: "last_name" } %>

但是不建议,因为它不是DRY,您需要在每个字段中重写它。

相关内容

  • 没有找到相关文章

最新更新