2011-02-04 24 views
37

Quiero agregar un campo de valor booleano ("is_public") a la tabla "my_model". Actualmente puedo usar esto:Cómo definir un campo booleano para una migración de rieles

class AddPublicToDream < ActiveRecord::Migration 
    def self.up 
    add_column :my_model, :is_public, :string 
    end 

    def self.down 
    remove_column :my_model, :is_public, :string 
    end 

end 

Entonces puede asignar "verdadero" o "falso" a mymodel.is_public en los controladores.

¿Puedo sustituir: cadena con: booleano para lograr el mismo efecto? ¿Ahorraría algo de espacio de la base de datos comparándolo con: cadena?

Respuesta

68

Sí, puede usar :boolean para esto, y sí, también ahorrará espacio en la base de datos.

+0

Gracias amigo ~ Pero lo probé en la consola. Se queja "NoMethodError: método indefinido' is_public = 'for # \t desde /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1008:in ' method_missing ' \t desde (irb): 16 " – lkahtz

+0

@fmttm: ¿Cómo lo probaste? – sevenseacat

+0

rake db: migrate – fl00r

18

Cambie el atributo de tipo a :boolean y ejecute rake db:migrate nuevamente. Debería poder llamar, por ejemplo:

Dream.is_public? # returning true or false depending whether is set. 
+9

Gracias. Aprendo de ti ese Dream.is_public? sería generado automáticamente por los rieles. coool ~~~ – lkahtz

+0

lol esto es gracioso –

Cuestiones relacionadas