Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

245
Vistas
¿Cómo almacenar una matriz en un modelo de usuario en una aplicación Ruby-On-Rails?

Estoy tratando de guardar una serie de cadenas en una columna de users de mi tabla. Tengo esta línea en mi archivo de migración add_column :users, :choices, :string . Esto no funciona porque estoy tratando de almacenar una matriz y no solo una cadena, mi terminal muestra Unpermitted parameter: :choices . ¿Cómo puedo almacenar una matriz? (Obviamente add_column :users, :choices, :array no funciona).

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La columna de la base de datos realmente no tiene nada que ver con el error. Las columnas de la matriz se definen definiendo un tipo y usando la opción array: true , ya que las matrices se escriben en la mayoría de las bases de datos, a diferencia de Ruby:

 add_column :users, :choices, :string, array: true

Sin embargo, esto suele ser una mala idea ya que está violando la primera forma normal (1NF) al poner múltiples valores en una columna y renunciar a todas las ventajas que tiene tener una tabla discreta en términos de normalización, asociaciones, claves foráneas, etc. Esto es idea que todos se entretienen cuando descubren columnas de matriz, pero no es realmente una buena decisión de diseño.

Unpermitted parameter: :choices se genera cuando pasa una instancia de ActionController::Parameters con una clave no permitida. No tiene absolutamente nada que ver con la columna de base de datos subyacente o el atributo.

Puede incluir en la lista blanca las columnas de la matriz pasando una clave hash con una matriz vacía:

 params.require(:user) .permit(:foo, :bar, choices: [])

Esto permite una matriz que contiene cualquier tipo de valor escalar permitido.

over 4 years ago · Santiago Trujillo Denunciar

0

Debería ser tan simple como esto en su migración

 def change add_column :users, :choices, :string, array: true end

Entonces probablemente desee evitar escribir tipos que no sean de matriz.

 #app/models/users.rb def choices=(input) raise TypeError, 'choices must be an array' unless input.is_a?(Array) super end
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda