2016-12-08 1 views
0

Ich benutze Rails 4.2.7 mit PostGres 9.5. Ich bekomme einen seltsamen Fehler, wenn ich überprüfe, ob mein Modell gültig ist. Ich habe ein Namensfeld, definiert in meinem PostGres db als solche ...Getting "Fehler bei der Verarbeitung: (ArgumentError) ungültige Byte-Sequenz in UTF-8" bei der Überprüfung "gültig?" Methode von meinem Modell

name    | character varying   | 

Allerdings, wenn ich diesen Wert in meinem Modell speichern (einige Dinge können nicht direkt von meinem Editor ausschneiden und einfügen ...)

Beth Ordu?±a 

Und ich laufe dann

 if !insert.valid? 

auf einem Modell mit den folgenden Validierungsregeln

class MyObjectTime < ActiveRecord::Base 
    belongs_to :my_object 
    has_one :linked_my_object, class_name: 'MyObject' 
    belongs_to :state 
    belongs_to :country 

    validates :time_in_ms, numericality: { greater_than: 0 } 
    validates :age, numericality: { greater_than: 0 }, :allow_blank =>  validates :name, presence: true, unless: :first_name_last_name_empty_and_user_id_is_not? 

    attr_accessor :name_city, :time_str, :hometown, :division, :age_group_rank_str, :gender_rank_str, :overall_rank_str 

ich den Fehler unten bekommen ...

Error during processing: (ArgumentError) invalid byte sequence in UTF-8 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/core_ext/object/blank.rb:117:in `===' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/core_ext/object/blank.rb:117:in `blank?' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validator.rb:150:in `block in validate' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validator.rb:148:in `each' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validator.rb:148:in `validate' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations/presence.rb:5:in `validate' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:455:in `public_send' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:455:in `block in make_lambda' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:182:in `block in conditional' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `block in call' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `each' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `call' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_validate_callbacks' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations.rb:399:in `run_validations!' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations/callbacks.rb:113:in `block in run_validations!' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:88:in `__run_callbacks__' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_validation_callbacks' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations/callbacks.rb:113:in `run_validations!' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations.rb:338:in `valid?' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:58:in `valid?' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:154:in `block (2 levels) in save_my_object_time_results' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:152:in `each' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:152:in `block in save_my_object_time_results' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:220:in `transaction' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:149:in `save_my_object_time_results' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:92:in `process_my_object_data' 
/Users/davea/Documents/workspace/myproject/app/services/active_com_my_object_finder_service.rb:119:in `block in process_my_object_link' 
/Users/davea/Documents/workspace/myproject/app/services/active_com_my_object_finder_service.rb:109:in `each' 
/Users/davea/Documents/workspace/myproject/app/services/active_com_my_object_finder_service.rb:109:in `process_my_object_link' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_my_object_finder_service.rb:29:in `block in process_data' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_my_object_finder_service.rb:28:in `each' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_my_object_finder_service.rb:28:in `process_data' 
/Users/davea/Documents/workspace/myproject/app/services/run_crawlers_service.rb:18:in `block in run_all_crawlers' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each' 
/Users/davea/Documents/workspace/myproject/app/services/run_crawlers_service.rb:5:in `run_all_crawlers' 

Wie vermeide ich diesen Fehler, ohne den Inhalt des Strings zu ändern? Wenn PostGres diese Daten speichern kann, ist das die einzige Sache, die mir wichtig ist. Ich weiß nicht im Voraus, welche Art von Codierung der Wert von "name" sein wird, wenn ich darauf schreibe. Ich kann den Datentyp PostGres-Spalte bei Bedarf ändern.

Antwort

0

Sie haben Ihre Datenbank mit UTF-8-Codierung erstellt. Weitere Informationen finden Sie unter PostgreSQL Doc

Sie können charlock_holmes gem für die Erkennung und Konvertierung von Zeichencodierung verwenden oder die richtige Codierung für Ihre Datenbank auswählen.

Verwandte Themen