Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Mongoid字段并随后添加了本地化 P>在稍后添加本地化时有什么要考虑的吗?_Ruby On Rails 3_Localization_Ruby On Rails 3.2_Mongoid_Mongoid3 - Fatal编程技术网

Ruby on rails 3 Mongoid字段并随后添加了本地化 P>在稍后添加本地化时有什么要考虑的吗?

Ruby on rails 3 Mongoid字段并随后添加了本地化 P>在稍后添加本地化时有什么要考虑的吗?,ruby-on-rails-3,localization,ruby-on-rails-3.2,mongoid,mongoid3,Ruby On Rails 3,Localization,Ruby On Rails 3.2,Mongoid,Mongoid3,从 班级文章 字段:标题,类型:字符串 到 班级文章 字段:标题,类型:字符串,本地化:true 我在我的文章模型上有内容,希望随后添加本地化 现在我发现有时内容会显示为散列 {"en"=>"asdfasdf", "de"=>"123123123"} 有时作为普通文本 如果我通过 @article.title # I get --> no implicit conversion from nil to integer @article.title_translations

从 班级文章 字段:标题,类型:字符串 到 班级文章 字段:标题,类型:字符串,本地化:true

我在我的
文章
模型上有内容,希望随后添加本地化

现在我发现有时内容会显示为散列

{"en"=>"asdfasdf", "de"=>"123123123"}
有时作为普通文本

如果我通过

@article.title
# I get --> no implicit conversion from nil to integer


@article.title_translations
# I get --> no implicit conversion from nil to integer
如果文档未翻译,则通常会发生这种情况。(字符串)

额外的 如果我试图更改内容,我也会遇到问题:

article.title # "en"
article.title_translations # "Test Title"
article.update_attribute(:name, c.name_translations)
# raises NoMethodError: undefined method `merge!' for "Test Title":String
article.name = c.title_translations
# raises NoMethodError: undefined method `merge!' for "Test Title":String
问题:
  • 如何正确地将字符串字段更改为“String,:localize=>true”
  • 有剧本或其他什么要翻译的吗

如果文档未翻译,而您试图访问此字段,则会引发错误:

no implicit conversion from nil to integer
raises NoMethodError: undefined method `merge!' for "Test Title":String
如果试图更改它,则会引发错误:

no implicit conversion from nil to integer
raises NoMethodError: undefined method `merge!' for "Test Title":String
这似乎是一只mongoid虫子。现在,您可以在添加“localize:true”后对迁移执行此操作:

I18n.locale = :en
Article.all.each do |article|
  begin
    article.title
  rescue
    b = article.attributes['title']
    article.unset('title')
    article.title = b
    article.save
  end
end

这对我来说很有意思。

翻译在内部通过散列处理

{ "en" => "book", "de" => "Buch" }
我和它一起工作

Article.each do |article|
  article.title_translations = {"en" => article.title_translations}
  article.save!
end
谢谢你,德登先生:


如果前面的解决方案引发异常,我会这样做:

Article.all.each do |article|
  value = article.attributes['title'].try(:clone)
  unless value.is_a?(Hash)
    Article.collection.where({ _id: article._id }).update({
      "$set" => {
        "title" => I18n.available_locales.inject({}) do |m, l|
           m[l.to_s] = v
           m
         end
      }
    })
  end
end

文档可能会帮助您:(本地化字段部分)不是真的,或者您指的是手册中的特定部分。本手册仅介绍如何使用“新鲜”字段进行此操作。但不是像字段类型更改这样的迁移。我的数据库已经充满了内容。谢谢你。德登还让我大开眼界: