2

我有一个发布模型,对某些字段进行验证,例如标题。

我删除了我觉得烦人的错误消息,并为当输入被包围在 field_with_error div 中时设置了一个不错的 CSS,以便用户知道哪个字段没有验证。

问题是当我部署到生产环境时,仍然会执行验证(即用户被发送回表单),但输入没有被错误 div 包围。

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

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

任何想法 ?

4

3 回答 3

3

在 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
于 2014-02-27T20:27:59.397 回答
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 加载后解释的。

现在的问题是,它怎么可能第一次没有加载,而应用程序中的其他所有内容都运行良好?

于 2012-06-22T14:05:38.567 回答
1

就我而言,这是因为宝石“酪蛋白”而发生的。没有这颗宝石,它工作正常。同样在开发中它正在工作,但不是在生产中。

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

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

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

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

然后初始化程序在生产中也可以正常工作。

于 2016-07-27T19:45:33.243 回答