【问题标题】:Rails API Globalize get all translationsRails API Globalize 获取所有翻译
【发布时间】:2020-05-31 11:30:07
【问题描述】:

在使用 globalize 的纯 API rails 应用程序中 - 如何返回模型的所有翻译?

即。

[
    {
        "id": 1,
        "name_ar": "كرستوفر نولان",
        "name_en": "Christopher Nolan",
        "name_fr": "Christopher Nolan"
    },
    {
        "id": 2,
        "name_ar": "ميشيل جوندري",
        "name_en": "Michael Gondry",
        "name_fr": "Michael Gondry"
    },
    // ...
]

我已经为此寻找了很长一段时间,但我没有找到解决方案。

【问题讨论】:

  • 这样做可能会对您有所帮助:object.translations.pluck(:locale, :title).to_h
  • 您能否提供一个更具描述性的示例?我在哪里做这个?
  • 我不确定您使用的数据结构,但我希望您的模型上有一个 translations 关联,object.translations 应该返回您该对象的所有翻译。因此,执行上述操作将为您提供类似这样的哈希:{ "ar" => "ولان", "en" => "Christopher" },您可以先在 Rails 控制台上尝试,看看它是否符合您的要求,然后将其应用到您返回数据的控制器上。
  • 如您所描述的那样有效。事情是我想以某种方式自动化这个过程。我的模型可能有 5-6 个可翻译的属性,我想这样获得它们:[property_name]_[locale]

标签: ruby-on-rails rails-api globalize


【解决方案1】:

您可以这样做:(不是一个完整的有效解决方案,但如果有帮助,请尝试一下)

# translated attribute names
attrs = %w[title description]

def translated_attributes(objects, attributes)
  result = []
  objects.each do |obj|
    trans = {}
    obj.translations.each do |tr|
      trans['id'] = obj.id
      attributes.each do |attr|
       trans[attr + '_' + tr['locale']] = tr[attr]
     end
    end
    result << trans
  end
  result
end

translated_attributes(objects, attrs)

请根据您的应用更改名称并相应地传递属性。

【讨论】:

  • @Manos 你对这个答案满意吗?否则,我可能会用纯 SQL 编写一些东西(由于显而易见的原因,根据结果集的大小,它的性能会更高)。
  • 不,该解决方案并不适合我。我会很感激纯 SQL 方法
【解决方案2】:

你可以这样做:

result = {}
Director.find_each do |director|
  result[:id] = director.id
  director.translations.each { |t| result["name_#{t[:locale]}"], result["description_#{t[:locale]}"] = t.title, t.description }
end

得到

{
    "id": 1,
    "name_ar": "كرستوفر نولان",
    "name_en": "Christopher Nolan",
    "name_fr": "Christopher Nolan",
    "description_ar": "...",
    "description_en": "...",
    "description_fr": "..."
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多