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

Guest · 发布于 2012年07月08日 · 最后由 ftandy 回复于 2014年07月26日 · 4475 次阅读
2771

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

共收到 14 条回复
395

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

2771

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

983

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

2771

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

983

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

1

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

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

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

2771

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

2771

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

1

方法一,改样式

.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 里面写逻辑。

2771

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

1

#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/ ,可以试试。

2771

#11楼 @Rei 非常感谢!

96

强力推simple_form

13051

@Rei nice啊!

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