2011-06-16 12 views
32

En los rieles genero un modelo con dos cadenas y me gustaría agregar más. ¿Cómo voy a hacer esto?¿Cómo se agrega un atributo a un modelo?

+0

Estos son atributos públicos? – natedavisolds

+0

necesita una migración http://guides.rubyonrails.org/migrations.html#creating-a-migration – dexter

+0

Así que solo agregue la cadena a la migración y luego rake db: migrate? – jsttn

Respuesta

34

Active Record asigna sus columnas de tablas a los atributos en su modelo, por lo que no necesita indicarle a los rieles que necesita más, lo que tiene que hacer es crear más columnas y los raíles van a detectarlos, los atributos se ser agregado automáticamente

Puede añadir más columnas a la tabla a través migrations:

rails generate migration AddNewColumnToMyTable column_name:column_type(string by default) 

Ejemplo:

rails generate migration AddDataToPosts views:integer clicks:integer last_reviewed_at:datetime 

esto generará un archivo:

db/2017.....rb 

abierto y añadir modificarlo si es necesario:

self.up 
    #add_column :tablename, :column_name, :column_type 
    add_column :posts, views, :integer 
    add_column :posts, clicks, :integer, default: 0 
end 

Espero que esto ayude.

+0

Supongamos que creo una aplicación de rieles y tengo un modelo llamado User_credential. Esto actualmente tiene: nombre y número de teléfono. Después de la implementación, el jefe de repente se da cuenta de que quiere agregar una dirección al modelo. Y exige que cree un formulario que agregue atributos a un modelo. ¿Es esto posible en los rieles? – BKSpurgeon

+0

@BKSpurgeon Una opción es usar un campo de serialización y almacenar los atributos personalizados en él. También eche un vistazo a http://api.rubyonrails.org/classes/ActiveRecord/Store.html, que le permite tratar atributos personalizados como los habituales. – JCorcuera

44

Sí, la solución de @JCorcuera es aplicable, pero sugiero aplicar un poco más de información a Rails para cumplir con nuestro requisito. Pruebe este enfoque:

rails generate migration add_columnname_to_tablename columnname:datatype 

Por ejemplo:

rails generate migration add_password_to_users password:string 
+0

Esta es definitivamente una mejor manera de hacerlo, solo asegúrese de obtener los nombres correctos para que funcione. – HussienK

+0

"obtiene los nombres correctos para que funcione": me gustaría añadir que add_columnname_to_tablename tiene un significado y tiene sentido. Eso puede parecer obvio, pero no pensé en ello de inmediato, proveniente de otra herramienta de migración donde el nombre de la migración nunca fue relevante. – Sarumanatee

2

Si está utilizando el 4.x rieles que ahora puede generar migraciones con referencias, así:

rieles generan la migración Usuario de AddUserRefToProducts: referencias

como usted puede ver en rails guides

2

sólo para que sea aún más simple que puede hacer:

rails g migration add_something_to_model something:string something_else:integer 
Cuestiones relacionadas