我有一个出版物模型,在某些字段上有验证,例如标题。
我删除了我觉得讨厌的错误消息,并在field_with_error div中包含输入时设置了一个很好的CSS,以便用户知道哪些字段没有验证。
当我部署到生产时,仍然执行验证(即,用户被发送回表单),但输入不包含错误div。
我尝试在生产模式下本地运行应用程序,我所能学到的是当我在config / environments / production.rb文件中将config.cache_classes设置为true时,它开始发生。
当我在控制器中记录@ publication.errors时,也会出现错误。
有什么想法吗?
答案 0 :(得分:2)
在深入研究Rails本身后,我发现在actionpack / lib / action_view / helpers / active_model_helper.rb
Base.field_error_proc.call(html_tag, self)
返回html_tag而不将其包装在错误div中。
进一步说明,在actionpack / lib / action_view / base.rb中,
@@field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe }
已重置或从未设置。
因此,作为一种解决方法,我发现了
ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe }
在任何控制器的顶部解决了这个问题,我想是因为它是在rails加载后解释的。
现在的问题是它是如何第一次没有加载的,而应用程序中的其他一切工作正常?
答案 1 :(得分:2)
在rails 4.0.1项目中,我添加了一个初始化程序:
config/initializers/field_with_errors.rb
这些行
ActionView::Base.class_eval do
@@field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe }
end
答案 2 :(得分:1)
在我的情况下,它发生了因为宝石'酪蛋白' 没有这个宝石它工作正常。 同样在开发过程中,它正在运行,但尚未投入生产。
忽略了我为field_error_proc设置的初始化程序。这是因为它被宝石覆盖了我猜...
例如,请参阅:https://github.com/russellquinn/casein/blob/master/app/controllers/casein/casein_controller.rb
最后,我将控制器复制到我的项目并删除了这一行:
Nmap scan report for mjsindia.cloudapp.net (13.66.56.229)
PORT STATE SERVICE
3389/tcp filtered ms-wbt-server
然后初始化器在生产中也能很好地工作。