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?
Rails 4 el tipo de datos PostgreSQL Array
En la terminal
rails generate migration AddTagsToProduct tags:string
class AddTagsToProduct < ActiveRecord::Migration
def change
add_column :products, :tags, :string, array: true, default: []
end
end
https://coderwall.com/p/sud9ja/rails-4-the-postgresql-array-data-type
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