【问题标题】:Mongoid find_by any language for a localized fieldMongoid find_by 本地化字段的任何语言
【发布时间】:2018-04-24 16:54:43
【问题描述】:

使用 Mongoid / MongoDB,我怎样才能找到一个文档,它的任何一种可用语言的名称都与我的 where 查询匹配?

假设我有一个具有本地化字段和许多翻译的模型

class Foo
   field :name, localize: true
end

Foo.create(name_translations: { 
  'fr' => 'Ingénierie logicielle',
  'en' => 'Computer Software'
})

.find_by(name: ) 方法似乎只能找到 I18n.current 语言(在我的情况下是法语),我如何搜索所有翻译?

我正在尝试Foo.find_by(name_translations: 'Computer Software) 的几种变体,但我仍然得到空结果...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 mongoid mongoid6


    【解决方案1】:

    也许有更优雅的解决方案,但由于 name 似乎是一个嵌入式文档,您需要匹配每种语言:

    term = 'Computer Software'
    Foo.or({ :'name.en' => term }, { :'name.fr' => term })
    

    【讨论】:

    • 嘿,刚发现MongoDB中的字段名称实际上是namename_translations来自mongoid。因此,如果您想更新您的解决方案,我可以只使用Foo.or( { :'name.en' => term } , { :'name.fr' => term })。我想我可以通过迭代 I18n.available_languages 来构建这个查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2016-07-09
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多