Ruby on rails 使用简单表单自定义错误消息

Ruby on rails 使用简单表单自定义错误消息,ruby-on-rails,ruby,ruby-on-rails-3,validation,error-handling,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,Error Handling,我用的是简单的宝石。我想自定义当用户验证失败时显示的错误消息。如何实现这一点?您可以轻松更改翻译文件中的默认错误消息,该文件位于config/locales/simple\u form.en.yml中 在特定的初始值设定项中,config/initializers/simple_form.rb可以否决html生成方式的默认选项 希望这有帮助 为了完整性,我想补充一点,formtastic是一个更容易开始的选择,因为它有一个默认布局。我非常喜欢simple_表单,但它不提供任何现成的格式,但这正是

我用的是简单的宝石。我想自定义当用户验证失败时显示的错误消息。如何实现这一点?

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

在特定的初始值设定项中,
config/initializers/simple_form.rb
可以否决html生成方式的默认选项

希望这有帮助

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

  • 您可以声明 模型中的错误消息:

    validates_length_of :name, :minimum => 5, :message => "blah blah blah"
    
  • 您可以为您的应用程序设置
    id
    class
    错误标记:

    <%= f.input :name, :error_html => { :id => "name_error"} %> 
    
    {:id=>“name\u error”}%>
    
    然后可以使用CSS进行样式设置

  • 你可以用

    <%= f.error :name, :id => "name_error" %>
    
    “名称错误”%>
    
    你会得到

    <span class="error" id="name_error">is too short (minimum is 5 characters)</span>
    
    太短(最少5个字符)
    

  • 我不知道简单的宝石是否有什么不同

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

    class User < ActiveRecord::Base
      validates :email, {:presence => true, :message => "is not filled up."}
    end
    
    有关
    区域设置的详细信息,请参见。另一种方法是在模型中定义人性化属性,如下所示:

    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
    
    class用户true,:message=>“未填写。”}
    人性化的_属性={
    :email=>“电子邮件地址”,
    …(其他字段及其人化名称)
    ...
    }
    def self.human_属性_名称(attr,options={})
    人性化的属性[属性到符号]| |超级
    结束
    结束
    
    对于自定义验证消息的样式,我们必须编辑验证消息的样式
    #错误解释
    字段错误
    ,在
    scaffold.css
    样式表中

    回答中没有提到另一个解决方案。您可以在表单本身中直接覆盖来自视图的错误消息。例如:

    <%= 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" } %>
    
    
    

    但是,不建议这样做,因为它不干燥,您需要在每个字段中覆盖它。

    您想自定义错误消息还是显示错误消息的样式?我最初指的是错误消息的内容,但我也有兴趣自定义样式。抱歉,不清楚。在
    simple\u form.en.yml
    中更改默认错误消息的语法是什么?如果一个属性有两个验证,比如
    :presence=>true
    :format=>…
    ?您将如何为每个表单提供不同的消息?标准验证消息与simple_表单无关,而是标准ActiveRecord。您可以在验证中显式声明消息,也可以检查标准消息的定义位置(以及如何覆盖它们)。是否有方法将简单表单配置为将标签和错误消息链接到默认activerecord i18n yaml?您的问题不太清楚,请在单独的问题中提问;顺便说一句,我还回答了一个问题:如何以简单的形式将i18n用于标签,他们在github上的文档很好地涵盖了这一点。
    <%= 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" } %>