Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

244
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda