Ruby on rails 3 Mongoid字段并随后添加了本地化 P>在稍后添加本地化时有什么要考虑的吗?
从 班级文章 字段:标题,类型:字符串 到 班级文章 字段:标题,类型:字符串,本地化:true 我在我的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
文章
模型上有内容,希望随后添加本地化
现在我发现有时内容会显示为散列
{"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
文档可能会帮助您:(本地化字段部分)不是真的,或者您指的是手册中的特定部分。本手册仅介绍如何使用“新鲜”字段进行此操作。但不是像字段类型更改这样的迁移。我的数据库已经充满了内容。谢谢你。德登还让我大开眼界: