Вызов obj.i18.pluck в модели с бэкэндом jsonb дает ошибку TypeError - PullRequest
0 голосов
/ 26 ноября 2018

Я использую Mobility 0.8.4, и когда я пытаюсь извлечь атрибут из модели, он вызывает ошибку TypeError.

# models/skill.rb
class Skill < ApplicationRecord
  extend Mobility

  translates :name, backend: :jsonb
end

# db/schema.rb
create_table "skills" do |t|
  ...
  t.jsonb "name", default: {}
  ...
end

Затем ...

irb(main):001:0> Skill.pluck(:name).take(5)
   (1.9ms)  SELECT "skills"."name" FROM "skills"
=> [{"pt-BR"=>"Ruby"}, {"pt-BR"=>"Java"}, {"pt-BR"=>"PHP"}, {"pt-BR"=>"Python"}, {"pt-BR"=>"C++"}]

irb(main):002:0> Skill.i18.pluck(:name).take(5)
Traceback (most recent call last):
        1: from (irb):2
TypeError (no implicit conversion of Mobility::Arel::Nodes::Jsonb into String)

Я что-то не так делаю?

Спасибо

1 Ответ

0 голосов
/ 27 ноября 2018

i18 хочет перевести строки, но вы передаёте это JSONB.Попробуйте:

Skill.i18.pluck("name -> 'pt-BR'").take(5)

Это должно взять значение ключа pt-BR (например, Ruby, Java и т. Д.) И передать его через транслятор i18, а не предоставлять полный JSONBполезная нагрузка для переводчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...