执行了validation,但仅在生产中没有在Rails 3.2.0上使用field_with_errors div包围的字段

我有一个出版物模型,在某些字段上有validation,例如标题。

我删除了我觉得烦人的错误消息,并在输入被field_with_error div包围时设置了一个很好的CSS,这样用户就知道哪些字段没有validation。

问题是当我部署到生产时,仍然执行validation(即,用户被发送回表单),但输入不包含错误div。

我尝试在生产模式下本地运行应用程序,我可以学到的是,当我在config / environments / production.rb文件中将config.cache_classes设置为true时,它开始发生。

此外,当我在控制器中记录@ publication.errors时,会出现错误。

任何的想法 ?

在rails 4.0.1项目中,我添加了一个初始化程序:

config/initializers/field_with_errors.rb 

用这些线条

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

在深入研究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| "
#{html_tag}
".html_safe }

已重置或从未设置。

因此,作为一种解决方法,我发现了推杆

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

在任何控制器的顶部解决了这个问题,我想是因为它是在rails加载后解释的。

现在的问题是它是如何第一次没有加载的,而应用程序中的其他一切工作得很好?

在我的情况下它发生是因为一个gem’酪蛋白’没有这个gem它工作正常。 在开发过程中它也在工作,但不是在生产中。

它忽略了我为field_error_proc设置的初始化程序。 这是因为它被gem覆盖了我猜…

例如,请参阅: https : //github.com/russellquinn/casein/blob/master/app/controllers/casein/casein_controller.rb

最后,我将控制器复制到我的项目并删除了这一行:

 ActionView::Base.field_error_proc = proc { |input, instance| "#{input}".html_safe } 

然后初始化器也在生产中工作正常。