Rails - Сохранить строку UTF-8 с PostgreSQL - PullRequest
0 голосов
/ 18 октября 2018

Как мне сохранить строку UTF-8 в модели с Postgresql?

Я не понимаю поведение консоли при выполнении чего-то вроде этого:

User.first.first_name
=> "ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ"

User.first.first_name.encoding
=> #<Encoding:UTF-8>

дает именно то, чтоЯ хочу, но:

"ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ"
=> ""

"ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ".encoding
=> #<Encoding:UTF-8>

Обе строки имеют одинаковую кодировку, но я не могу отобразить ее во втором примере (она выдает пустую строку), даже если оба объекта имеют одинаковую кодировку.

Это означает, что если я хочу сделать что-то вроде:

User.first.update(first_name: "ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ")
=> true

, то это удастся, но first_name будет установлена ​​в пустую строку вместо той, которую я хочу.

В консоли psql будет работать следующий оператор и задавать правильные данные:

UPDATE users SET first_name = 'ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ'

Как мне перейти к установке имени пользователя в строку UTF8 с помощью ruby?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

В случае, если это случится с кем-то еще, проблема может быть исправлена ​​с помощью:

  • переустановка ruby ​​следующим образом (Mac):

    RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline`" rbenv install 2.3.7

  • удаление rb-readline в группу разработчиков Gemfile

0 голосов
/ 18 октября 2018

Вы пытались форсировать кодировку?

User.first.update(first_name: "ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ".force_encoding("UTF-8"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...