ActionView :: Template :: Error(未定义的方法`force_encoding'代表nil:NilClass):

时间:2015-03-31 01:19:01

标签: ruby-on-rails templates encoding devise actionview

我在'vendor / bundler'中使用Gems。当我收到编码错误时,我通过在“output_safty_encoding_patch.rb”中添加名为“config/initializer”的文件来修复它:

  

output_safty_encoding_patch.rb

module ActiveSupport
  class SafeBuffer < String
    def concat(value)
      if value.html_safe?
        super(value.force_encoding('utf-8'))
      else
        super(ERB::Util.h(value.force_encoding('utf-8')))
      end
    end
    alias << concat
  end
end

然后我使用了宝石'设计'并尝试创建一个新帖子。  我收到了这个错误。

  

ActionView :: Template :: Error(未定义的方法`force_encoding'为nil:NilClass):

我的日志:

Processing by PostsController#new as HTML
  Rendered posts/_form.html.slim (30.2ms)
  Rendered posts/new.html.erb within layouts/application (36.8ms)
Completed 500 Internal Server Error in 43ms

ActionView::Template::Error (undefined method `force_encoding' for nil:NilClass):
    1: = form_for(@post) do |f|
    2: -if @post.errors.any?
    3:   #error_explanation
    4:     h2= pluralize(@post.errors.count, "error") 
  config/initializers/output_safty_encoding_patch.rb:7:in `concat'
  app/views/posts/_form.html.slim:1:in _app_views_posts__form_html_slim__2419859499811208315_70341230451880
  app/views/posts/new.html.erb:4:in _app_views_posts_new_html_erb___3935161508588949089_70341230567660

1 个答案:

答案 0 :(得分:0)

您可能需要重新考虑ActiveSupport :: Safebuffer的猴子补丁(您在config/initializers/output_safty_encoding_patch.rb中获得的文件)。

改变核心类的行为必然会遇到难以调试的问题(比如这个)。

也许你可以在第一时间发布一个关于导致你进入猴子补丁的问题?