Как получить идентификационный номер из другой локали в модели - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть одна модель (category.rb) в моем приложении rails, настроенном как показано ниже:

идентификатор, имя, локаль

1, Коммуникабельность, еп

2, Пруденс и Деликатес, en

3, 社會 性, ZH-TW

4, "謹慎 性, 細膩 性", ж-TW

Я хотел бы знать начальный идентификатор для другой локали, например, начальный идентификатор для: en будет «1», а идентификатор для: «zh-TW» будет «3». Вместо жесткого определения исходного идентификатора в приложении, есть ли гем или метод для определения начального идентификатора? Так что в будущем, когда я добавлю новую запись как 5, Sociabilidad, es, я смогу получить идентификатор правильно, без жесткого кода?

Пожалуйста, сообщите. Спасибо.

1 Ответ

0 голосов
/ 16 сентября 2018

Я бы написал это, как показано ниже, используя AR:

class Category < ApplicationRecord
  scope :first_in_locale, ->() {
    joins(<<-SQL)
      JOIN (SELECT locale, min(id) AS id FROM categories GROUP BY locale) b ON b.id = categories.id
    SQL
    .select('categories.*')
    .order('categories.id')
  }
end

В консоли Rails:

2.5.1 :010 > pp Category.first_in_locale
  Category Load (0.9ms)  SELECT categories.* FROM "categories" JOIN (SELECT locale, min(id) as id from categories group by locale) b on b.id = categories.id ORDER BY categories.id
[#<Category:0x00007fc597e3db68
  id: 1,
  name: "Sociability",
  locale: "en",
  created_at: Sun, 16 Sep 2018 07:47:34 UTC +00:00,
  updated_at: Sun, 16 Sep 2018 07:47:34 UTC +00:00>,
 #<Category:0x00007fc597e3d3e8
  id: 3,
  name: "社會性",
  locale: "zh-TW",
  created_at: Sun, 16 Sep 2018 07:47:34 UTC +00:00,
  updated_at: Sun, 16 Sep 2018 07:47:34 UTC +00:00>]

Вот ответ SQL , который я завернул в ActiveRecord.

...