新手问题 Rails 验证显示好难看,要怎么自定义?

匿名 · 2012年07月08日 · 最后由 ftandy 回复于 2014年07月26日 · 6372 次阅读

用 rails 自带的验证功能校验不通过的时候显示的样式好难看,要怎么自定义?

样式可以自己写的啊~ 你拿到错误信息之后随便定制

匿名 #2 2012年07月08日

#1 楼 @fresh_fish 错误信息好像是 rails 自己附加上去的,我要怎么控制呢?

#2 楼 @mappings 完全可以删除自动生成的错误提示信息,自己定制。

匿名 #4 2012年07月08日

#3 楼 @chucai 怎么删除自动生成的错误提示信息?

#4 楼 @mappings 将 form.html.erb 中的错误删除不就行了么?

楼主是用脚手架吗?实际开发是不会用脚手架的,不过你也可以基于脚手架修改。

每个 ActiveRecord 对象会有一个 .errors 属性,里面储存了对象校验的结果,类似一个 hash。拿到 errors 数据你可以做任何想要的错误提示样式。

详情看这里 http://guides.rubyonrails.org/active_record_validations_callbacks.html#working-with-validation-errors

匿名 #7 2012年07月08日

#5 楼 @chucai ..... rails 在校验不通过之后会在运行时自动在页面上追加错误提示信息,你的方法不可行哦~

匿名 #8 2012年07月08日

#6 楼 @Rei 我是自己写的 action 和 view。检验不通过之后会把每一个表单元素都用 div 包裹起来 <div class="field_with_errors"></div>导致布局乱掉了,而且也没有显示任何错误消息

方法一,改样式

.field_with_errors {display: inline;}

把 field_with_errors 的样式改得不明显。

方法二,修改或者去掉 ActionView 默认的 error 结构

在 config/initializers 下面添加一个配置文件,内容是

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  "#{html_tag}".html_safe
end

这样会去掉多余的 field_with_errors,想定制样式,可以在这个 Proc 里面做手脚或者在 view 里面写逻辑。

匿名 #10 2012年07月08日

#9 楼 @Rei 非常感谢! 在问下 rails 里面没有直接的配置选项可以关掉这个功能么?改样式,或修改生成 view 都感觉不是很优雅。

#10 楼 @mappings ActionView 自带的 formbuilder 对这里的处理好像不是很好,之前我定制错误的需求也不是很大没深入研究。那个 Proc 就相当于关掉了。

我发现 simple form 对 error 的处理似乎更好,https://github.com/plataformatec/simple_form/ ,比如做出 twitter bootstrap 的样式 http://blog.plataformatec.com.br/2012/02/simpleform-2-0-bootstrap-for-you-with-love/ ,可以试试。

匿名 #12 2012年07月08日

#11 楼 @Rei 非常感谢!

强力推 simple_form

@Rei nice 啊!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号