Globalize3并以所有语言创建对象

时间:2013-09-03 18:50:58

标签: ruby-on-rails globalize3

我有一个名为Menu的模型,其中包含属于它的product_types。

创建菜单后,我想设置一些默认的product_types:

我有这个常数:

DEFAULTS = [ 
  { name_en: 'White bread', name_nl: 'Wit brood', name_fr: 'Pain blanc'},
  { name_en: 'Brown bread', name_nl: 'Bruin brood', name_fr: 'Pain brun' }
]

这应该创建翻译,但我现在得到一个错误说:

“除非保存父级,否则无法调用create”

def create_defaults
  ProductType::DEFAULTS.each do |pt|
    t = product_types.create
    t.translations.create(locale: 'en', name: pt[:name_en])
    t.translations.create(locale: 'nl', name: pt[:name_nl])
    t.translations.create(locale: 'fr', name: pt[:name_fr])
  end

菜单可以是3种语言(可由用户选择),用户也可以使用默认语言。这种默认语言可以是荷兰语,英语或法语。因此,荷兰语和法语的荷兰语用户可以使用菜单语言。

我之前尝试的代码(没有给出错误消息)是:

 def create_defaults
   ProductType::DEFAULTS.each do |pt|
     t = product_types.create(name: pt[:name_en])
     t.translations.create(locale: 'nl', name: pt[:name_nl])
     t.translations.create(locale: 'fr', name: pt[:name_fr])
   end
 end

此过程的问题是:假设用户将其默认语言设置为荷兰语,并且菜单语言也设置为荷兰语(没有其他语言)。然后默认创建的类型显示在英语...

1 个答案:

答案 0 :(得分:0)

这就是诀窍:

def create_defaults
  ProductType::DEFAULTS.each do |pt|
    t = product_types.create
    t.translations.build(locale: 'en', name: pt[:name_en])
    t.translations.build(locale: 'nl', name: pt[:name_nl])
    t.translations.build(locale: 'fr', name: pt[:name_fr])
    t.save
  end
end

保存父项时,也会保存所有子对象。