Rails: Ajout de la migration pour ajouter un tableau (vide par défaut)
J'essaye d'ajouter une colonne appelée action à l'un de mes ressources.
L'idée est que les utilisateurs peuvent télécharger des documents et de les partager avec d'autres (spécifique) des utilisateurs, et le tableau contient les e-mails de ceux que l'utilisateur veut partager avec.
J'ai essayé d'ajouter une migration avec le code
class AddShareToDocuments < ActiveRecord::Migration
def change
add_column :documents, :share, :array, :default => []
end
end
Mais quand j'ouvre les rails de la console dans l'invite de commande, il est dit que la part de:nil et user.document.share.class est NilClass.
La création d'un nouveau tableau dans la console rails sandbox en tapant
newarray = []
dit que newarray.class est Tableau.
Quelqu'un peut repérer ce que je fais mal?
source d'informationauteur user2669464
Vous devez vous connecter pour publier un commentaire.
Rails 4 PostgreSQL type de données de Tableau
Dans le terminal
https://coderwall.com/p/sud9ja/rails-4-the-postgresql-array-data-type
si vous voulez soutenir toutes les bases de données, vous devez sérialiser le tableau dans une Chaîne de
En cas de Postgresql et array type de données que j'ai trouvé https://coderwall.com/p/sud9ja
Tableaux ne sont pas normalement un type à être stockées dans une base de données. Comme michelemina points, vous pouvez sérialiser dans une chaîne de caractères et de les stocker, si le type de données de la matrice est simple (chaînes de caractères, int, etc). Pour vos e-mails, vous pouvez faire cela.
Si, d'autre part, vous voulez être en mesure de trouver tous les objets Utilisateur qu'un document a été partagé avec, il ya de meilleures façons de le faire. Vous voulez une "table de jointure". Dans votre cas, la jointure de table objet peut être appelé une Part, et avoir les attributs suivants:
Puis, dans votre classe de Document,
Autant que la génération de la migration, cela peut être hacky, mais vous pouvez créer une nouvelle migration qui changent le type "string" (Edit: le code est correct):