2015-11-12 2 views
2

Пользователь использует смайлик, и это ошибка моего приложения. Как я могу проверить, содержит ли строка смайлик и удаляет только смайлик?Удалить только смайлики из строки в Ruby

Message.create(user: @user, ticket: @ticket, text: "\r\nIm done with this bug! \u{1f431}!\r\n") 

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: 'x90\xB1!\x0D 
+0

Вы могли бы найти [это] (http://andy-carter.com/blog/saving-emoticons-unicode-from-twitter-to-a-mysql-database) полезно. –

+0

Спасибо Кэри! В настоящее время я не могу изменить таблицу mysql. Или это будет решение, которое я бы выполнил. –

ответ

2

Это происходит потому, что ваша база данных не позволяет utf8mb4, поэтому вам нужно проверить оба и вернуть текст. Я бы сделал проверку как обратный вызов и только в том случае, если текстовое поле изменилось, чтобы уменьшить количество обращений к обратному вызову.

before_save :ensure_utf8, if: :text_changed? 

def ensure_utf8 
    if self.text 
     self.text = self.text.encode(Encoding.find('UTF-8'), { invalid: :replace, undef: :replace, replace: '' }) 
     self.text = self.text.each_char.select { |c| c.bytes.first < 240 }.join('') 
    end 
end 
+0

благодарит за помощь! –

+0

1. В чем значение '240' (а не' 255', например)? 2. Вам нужно открыть класс, в котором определяется 'sure_utf8'. 3. Вам не нужен ни один из этих «я». –

+0

Базы смаймиков начинаются с 240, а не 255. Также вам нужно само. для работы с обратным вызовом. –