【问题标题】:Globalize3 and creating object in all languagesGlobalize3 和创建所有语言的对象
【发布时间】:2013-09-03 18:50:57
【问题描述】:

我有一个名为 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

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

【问题讨论】:

    标签: ruby-on-rails globalize3


    【解决方案1】:

    这就是诀窍:

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多