我使用的是simple_form gem。我想定制当用户验证失败时显示的错误消息。我怎样才能做到这一点呢?
-
可以声明文件的内容模型中的错误信息:
validates_length_of :name, :minimum => 5, :message => "blah blah blah"
-
您可以设置您的
id
或class
错误标记:<%= f.input :name, :error_html => { :id => "name_error"} %>
-
你可以使用
<%= f.error :name, :id => "name_error" %>
得到
<span class="error" id="name_error">is too short (minimum is 5 characters)</span>
我不知道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
的详细信息链接。另一种方法是在模型中定义像这样的人性化属性:
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
样式表中。
您可以很容易地更改翻译文件中出现的默认错误消息,该文件位于config/locales/simple_form.en.yml
中。
在特定的初始化器config/initializers/simple_form.rb
中,您可以否决生成html的默认选项。
希望对你有帮助。
为了完整性,我想补充的是,formtastic是一个更容易的选择,因为它有一个默认的布局。我非常喜欢simple_form,但它不提供任何开箱即用的格式,但这是他们的意图。使用Formtastic很难(不可能)更改生成的html,而使用simple_form可以完全按照自己的喜好塑造生成的html。如果您有一个设计器,并且生成的表单必须生成相同的html,那么这一点尤其有用。所以,如果你刚开始使用,formtastic会让你更快地获得更好的效果。还要注意,切换非常容易,因为语法几乎是相同的。
这里解释了另一种在答案中没有提到的解决方案。您可以在表单本身中直接覆盖视图中的错误消息。例如:
<%= 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,您需要在每个字段中重写它。