2016-11-26 1 views
-1
class AddOpenAttributeToCourses < ActiveRecord::Migration 
    def change 
    add_column :courses, :open, :boolean 
    change_column_default(:courses, :open, {:from=>true, :to=>false}) 
    end 
end 

!!!!! puis l'opération !!!!!!Première table de cours pour ajouter un champ ouvert, tapez Boolean; rake db: migrate Erreur d'opération?

rake db:migrate 
== 20161126133112 AddOpenAttributeToCourses: migrating ======================== 
-- add_column(:courses, :open, :boolean) 
    -> 0.1047s 
-- change_column_default(:courses, :open, {:from=>true, :to=>false}) 
rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

PG::InvalidTextRepresentation: ERROR: invalid input syntax for type boolean: "--- 
:from: true 
:to: false 
" 
: ALTER TABLE "courses" ALTER COLUMN "open" SET DEFAULT '--- 
:from: true 
:to: false 
' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `log' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:154:in `execute' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/postgresql/schema_statements.rb:455:in `change_column_default' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:665:in `block in method_missing' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:634:in `block in say_with_time' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:634:in `say_with_time' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:654:in `method_missing' 
/home/ubuntu/workspace/db/migrate/20161126133112_add_open_attribute_to_courses.rb:4:in `change' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:608:in `exec_migration' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:592:in `block (2 levels) in migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:591:in `block in migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in `with_connection' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:590:in `migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:768:in `migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:998:in `block in execute_migration_in_transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:1044:in `block in ddl_transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/transactions.rb:220:in `transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:1044:in `ddl_transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:997:in `execute_migration_in_transaction' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:959:in `block in migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:955:in `each' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:955:in `migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:823:in `up' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/migration.rb:801:in `migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/tasks/database_tasks.rb:137:in `migrate' 
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5.2/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>' 
/usr/local/rvm/gems/ruby-2.3.0/gems/rake-11.2.2/exe/rake:27:in `<top (required)>' 
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: invalid input syntax for type boolean: "--- 
:from: true 
:to: false 
" 
+0

Voulez-vous s'il vous plaît modifier votre question pour nous dire exactement ce que vous aviez l'intention de faire et quels étaient les résultats attendus? L'affichage d'une classe et d'un message d'erreur n'est pas une bonne description de votre problème. –

Répondre

0

Vous pouvez créer la colonne et définir une valeur par défaut dans une ligne:

add_column :courses, :open, :boolean, default: true 

Je ne sais pas exactement pourquoi vous obtenez cette erreur. Peut-être que c'est parce que vous dites "changer la valeur par défaut de faux à vrai" mais la valeur par défaut était pas faux, en fait c'était nil.

+0

ok, je vais essayer à nouveau merci. – wcyd

2

Vous essayez d'utiliser le Rails5 arguments to change_column_default:

change_column_default (nom_table, nom_colonne, default_or_changes)
[...] Passing un hachage contenant :from et :to fera ce changement réversible migration:

change_column_default(:posts, :state, from: nil, to: "draft") 

avec Rails4:

change_column_default (nom_table, nom_colonne, par défaut)
Définit une nouvelle valeur par défaut pour une colonne: [...]

La substance drôle regardant vous voyez dans le SQL:

--- 
:from: true 
:to: false 

est la version YAML de votre { :from => true, :to => false } Ruby Hash BTW.

Vous devez utiliser up et down séparés méthodes et version simplifiée de change_column_default avec Rails4:

def up 
    change_column_default(:courses, :open, false) 
end 
def down 
    change_column_default(:courses, :open, true) 
end 

ou tout simplement définir la valeur par défaut lorsque vous créez la colonne:

class AddOpenAttributeToCourses < ActiveRecord::Migration 
    def change 
    add_column :courses, :open, :boolean, :default => false 
    end 
end 

BTW, puisque vous n'a pas spécifié un :default lorsque vous avez ajouté la colonne, il aurait une valeur par défaut de null, pas true.

+0

merci beaucoup – wcyd