0

我正在使用 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)

难道我做错了什么?

谢谢

4

1 回答 1

0

i18想要翻译字符串,但你正在给它提供 JSONB。尝试:

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

这应该提取键的值pt-BR(例如,,RubyJava)并将其提供给 i18 翻译器,而不是向翻译器提供完整的 JSONB 有效负载。

于 2018-11-27T04:11:12.247 回答