誰かが私を助けてくれることを願っています:)
そのため、たとえばdbからのビューでutf8文字を使用すると、utf8エンコーディングで問題が発生していました。
このエラーが発生しました:
incompatible character encodings: ASCII-8BIT and UTF-8
そしてところで、それはデータベースからのコーディングでは問題ではありませんでした。とにかく、私は私の問題の解決策を見つけました、そしてそれはでメソッドを変更することでした
Ruby193\lib\ruby\gems\1.9.1\gems\activesupport-3.2.6\lib\active_support\core_ext\string\output_safety.rb
私が変更した方法は「concat」でした。だから私はこの方法を変更しました:
def concat(value)
if !html_safe? || value.html_safe?
super(value)
else
super(ERB::Util.h(value))
end
end
alias << concat
これに:
def concat(value)
value = (value).force_encoding('UTF-8')
if !html_safe? || value.html_safe?
super(value)
else
super(ERB::Util.h(value))
end
end
alias << concat
しかしもちろん、アプリは他のサーバーでは動作しないため、それは悪い考えです。
だから私は私の初期化子からこのメソッドをオーバーライドしたいので、私は作成しました:
config/initializers/utf8_fix.rb
このコードで:
module ActiveSupport #:nodoc:
class SafeBuffer < String
def self.concat(value)
value = (value).force_encoding('UTF-8')
puts "--------------------------------"
puts "Loaded concat in utf8fix.rb"
puts "--------------------------------"
if !html_safe? || value.html_safe?
super(value)
else
super(ERB::Util.h(value))
end
end
alias << concat
end
end
しかし、それはデフォルトの方法を上書きしないようです。だから誰かが私に言うことができます、私は何が間違っているのですか?