2014-08-27 109 views
0
gem 'acts_as_taggable_on' 
gem 'activeadmin' 

... 

ActiveAdmin.register Article do 
... 
    form do |f| 
     f.inputs do 
      f.input :tag_list 
     end 
    end 
end 

我试着输入作为标签词“статья”西里尔输入符号时未定义的转换,但换来的:Ruby on Rails的 - 与acts_as_taggable宝石

Encoding::UndefinedConversionError in Admin::ArticlesController#create 
"\xD1" from ASCII-8BIT to UTF-8 

到处找也没有找到合适的答案。我应该怎么做才能消除这个错误?

UPDATE 我注意到,像title或article_body这样的其他输入字段可以传递西里尔符号。所以我想它有一些与acts_as_taggable宝石。

+0

什么是你的rails和ruby版本吗? – 2014-08-27 16:57:43

+0

红宝石2.1.2和rails 4.1.4 – Flame 2014-08-27 17:01:21

回答

0

所以真的是acts_as_taggable宝石的问题。 在我通过互联网和铁轨控制台的研究中,我发现问题是在保存到数据库期间。转换失败是因为它将某些未知编码转换为二进制格式,而sqlite3无法将其保存到字符串列。所以我编辑如下的宝石文件

~/.rvm/gems/ruby-2.1.2/gems/acts_as_taggable_on-3.0.0.rc2/lib/acts_as_taggable_on/tag.rb 

... 
def as_8bit_ascii(string) 
    if defined?(Encoding) 
     string.to_s.force_encoding('UTF-8') #It was BINARY previously 
    else 
     string.to_s.mb_chars 
    end 
end 

现在它的工作!

UPDATE

这是最好不要修补程序源代码,但将它应用到你的应用程序,我猜。所以,要申请所谓的猴子补丁,我没有遵循。

1)在配置文件创建tag.rb /初始化

2)从创业板和切割代码复制/粘贴它只是如下(通过实验得知,并在谷歌搜索猴子补丁)

ActsAsTaggableOn::Tag.class_eval do 
    class << self 
    private 
     def as_8bit_ascii(string) 
      if defined?(Encoding) 
       string.to_s.force_encoding('UTF-8') #It was BINARY previously 
      else 
       string.to_s.mb_chars 
      end 
     end 
    end 
end