我正在使用simple_form gem。我想自定义用户验证失败时显示的错误消息。我怎么能做到这一点?
答案 0 :(得分:16)
您可以声明的内容 模型中的错误消息:
validates_length_of :name, :minimum => 5, :message => "blah blah blah"
您可以为自己设置id
或class
错误标记:
<%= f.input :name, :error_html => { :id => "name_error"} %>
然后您可以使用CSS进行样式设计。
您可以使用
<%= f.error :name, :id => "name_error" %>
你会得到
<span class="error" id="name_error">is too short (minimum is 5 characters)</span>
答案 1 :(得分:5)
我不知道simple_form gem是否有任何不同。
对于要更改的错误消息的内容,您可以使用模型中的:message
属性。
class User < ActiveRecord::Base
validates :email, {:presence => true, :message => "is not filled up."}
end
现在验证邮件将是Email is not filled up
。如果您希望更改字段名称(Email
到E-mail address
之类的内容),现在的方法是在locales.rb
文件中定义它,就像这样
# config/locales/en.yml
en:
activerecord:
attributes:
user:
email: "E-mail address"
有关locales
的详细信息,请参阅link。另一种方法是在模型中定义人性化的属性,如:
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
。
答案 2 :(得分:3)
您可以轻松更改翻译文件中的默认错误消息,该文件位于config/locales/simple_form.en.yml
。
在特定的初始值设定项config/initializers/simple_form.rb
中,您可以否决生成html的默认选项。
希望这有帮助。
为了完整性,我想补充一点,formtastic是一个更容易的选择,因为它有一个默认的布局。我非常喜欢simple_form,但它不提供任何开箱即用的格式,但这是他们的意图。使用Formtastic,很难(不可能)更改生成的html,而使用simple_form可以完全按照自己的喜好塑造生成的html。如果你有一个设计师,这个特别有用,你生成的表格必须生成相同的html。因此,如果您开始使用,formtastic将更快地为您提供更好看的结果。另请注意,切换非常容易,因为语法几乎相同。
答案 3 :(得分:0)
还有here中解释的另一种解决方案,答案中没有提到。您可以直接在表单本身中覆盖来自视图的错误消息。例如:
<%= 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,因此不建议这样做,您需要在每个字段中将其覆盖。