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