7

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

+1

是否要自定义错误消息或错误消息的风格disolayed? – rubyprince 2011-04-27 18:34:16

+0

我最初的意思是错误信息的内容,但我也有兴趣定制风格。对不起,不清楚。 – 2011-04-27 18:47:07

回答

3

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

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

希望这会有所帮助。

为了完整,我想补充一点,formtastic是一个更容易的选择,因为它有一个默认布局。我很喜欢simple_form,但它并不提供任何格式,但这是他们的意图。使用Formtastic很难(不可能)更改生成的html,并且使用simple_form可以完全根据自己的喜好生成生成的html。如果你有一个设计者,这是特别有用的,你生成的表格必须生成相同的html。所以如果你开始了,formtastic会更快地给你看起来更漂亮的结果。还要注意,切换非常容易,因为语法几乎完全相同。

+0

更改'simple_form.en.yml'中的默认错误消息的语法是什么?如果你有两个验证属性,如':presence => true'和':format => ...'?你将如何为每个消息提供不同的消息? – 2011-04-27 20:28:50

+0

标准验证消息与simple_form无关,但是标准的ActiveRecord。您可以在验证中明确声明消息,也可以检查标准消息的定义(以及如何覆盖它们)的https://github.com/svenfuchs/rails-i18n。 – nathanvda 2011-04-27 21:14:19

+0

有没有办法配置simple_form将标签和错误消息链接到默认的activerecord i18n yaml? – Matthias 2016-04-02 11:23:31

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

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

    <%= f.input :name, :error_html => { :id => "name_error"} %> 
    

    然后你可以使用CSS进行造型。

  3. 你也可以使用

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

    ,你会得到

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

我不知道它是simple_form宝石有什么不同。

有关要更改错误消息的内容,可以使用模型中的: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" 

link关于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样式表。