使用simple_form自定义错误消息

Jus*_*zer 7 ruby validation error-handling ruby-on-rails ruby-on-rails-3

我正在使用simple_form gem.我想自定义用户验证失败时显示的错误消息.我怎么能做到这一点?

Vas*_*ich 16

  1. 您可以在模型中声明错误消息的内容:

    validates_length_of :name, :minimum => 5, :message => "blah blah blah"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您可以设置idclass为您的错误标记:

    <%= f.input :name, :error_html => { :id => "name_error"} %> 
    
    Run Code Online (Sandbox Code Playgroud)

    然后您可以使用CSS进行样式设置.

  3. 你可以使用

    <%= f.error :name, :id => "name_error" %>
    
    Run Code Online (Sandbox Code Playgroud)

    你会得到的

    <span class="error" id="name_error">is too short (minimum is 5 characters)</span>
    
    Run Code Online (Sandbox Code Playgroud)


rub*_*nce 5

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

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

class User < ActiveRecord::Base
  validates :email, {:presence => true, :message => "is not filled up."}
end
Run Code Online (Sandbox Code Playgroud)

现在验证消息将是Email is not filled up.如果你想要的字段名称也将被改变(EmailE-mail address类似的东西),该办法目前正处于去定义它locales.rb像这样的文件

# config/locales/en.yml
en:
  activerecord:
    attributes:
      user:
        email: "E-mail address"
Run Code Online (Sandbox Code Playgroud)

有关详情,请参阅链接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
Run Code Online (Sandbox Code Playgroud)

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


nat*_*vda 4

您可以轻松更改翻译文件中的默认错误消息,该消息位于config/locales/simple_form.en.yml.

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

希望这可以帮助。

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