with tutorial site para framework fra español applications ruby-on-rails arrays class default null

ruby-on-rails - tutorial - framework django para python



Rails: Agregar migración para agregar una matriz(vacío predeterminado) (3)

Los arreglos normalmente no son un tipo para ser almacenados en una base de datos. Como señala michelemina, puede serializarlos en una cadena y almacenarlos, si el tipo de datos en la matriz es simple (cadenas, int, etc.). Para su caso de correos electrónicos, podría hacer esto.

Si, por otro lado, desea poder encontrar todos los objetos de Usuario con los que se compartió un documento, hay mejores maneras de hacerlo. Usted querrá una "tabla de unión". En su caso, el objeto de la tabla de unión puede denominarse Compartir y tiene los siguientes atributos:

class Share belongs_to :user belongs_to :document end

Luego, en tu clase de documentos,

has_many :shares has_many :users, :through => :shares

En cuanto a la generación de la migración, esto puede ser complicado, pero puede crear una nueva migración que cambie el tipo a "cadena" (Edición: código correcto):

class AddShareToDocuments < ActiveRecord::Migration def up change_column :documents, :share, :string end def down change_column :documents, :share, :array, :default => [] end end

Estoy tratando de agregar una columna llamada compartir a uno de mis recursos. La idea es que los usuarios puedan cargar documentos y compartirlos con otros usuarios (específicos), y la matriz contiene los correos electrónicos de aquellos con los que el usuario desea compartir.

Intenté agregar una migración con el código

class AddShareToDocuments < ActiveRecord::Migration def change add_column :documents, :share, :array, :default => [] end end

Pero cuando abro la consola de Rails en el símbolo del sistema, dice que compartir: nil y user.document.share.class es NilClass.

Creando una nueva matriz en la caja de arena de la consola de rieles escribiendo

newarray = []

dice que newarray.class es Array.

¿Alguien puede detectar lo que estoy haciendo mal?



Si desea admitir todas las bases de datos, debe serializar la matriz en una cadena.

class Documents < ActiveRecord::Base serialize :share end class AddShareToDocuments < ActiveRecord::Migration def change add_column :documents, :share, :string, :default => [] end end

En el caso de Postgresql y el tipo de datos de matriz encontré https://coderwall.com/p/sud9ja