Tableau Attribut pour Ruby Modèle
Est-il possible de créer un attribut pour une classe qui est un tableau? J'ai essayé de lecture cette mais je n'ai pas obtenir beaucoup hors de lui. Je veux faire quelque chose comme ceci:
class CreateArches < ActiveRecord::Migration
def change
create_table :arches do |t|
t.string :name
t.array :thearray
t.timestamps
end
end
end
à ce que, quand je l'appelle .thearray sur une instance de l'Arche-je obtenir un tableau que je peux ajouter de nouveaux éléments à l'.
ruby-1.9.2-p290 :006 > arc = Arch.new
ruby-1.9.2-p290 :007 > arc.thearray
=> []
Vous devez vous connecter pour publier un commentaire.
De créer un modèle avec un champ de texte
modifier votre modèle afin de le rendre le champ sérialisé dans un tableau
tester
Alors que vous pouvez utiliser un tableau sérialisé que tokland suggéré, c'est rarement une bonne idée dans une base de données relationnelle. Vous avez trois supérieure alternatives:
has_many
relation.composed_of
.has_many
s, vous pouvez enquêter sur une DB qui prend en charge les champs du tableau. PostgreSQL est-ce (et de la matrice de champs sont pris en charge dans les Rails 4 migrations), mais vous pouvez utiliser une base de données SQL comme MongoDB ou de persistance objet comme MagLev est censé fournir.Si vous pouvez décrire votre cas d'utilisation, -- c'est ce que les données que vous avez dans le tableau, nous pouvons essayer de les aider à comprendre ce que le meilleur plan d'action.
composed_of
composed_of
et l'a trouvé vraiment bien (pour de l'argent attributs par exemple). Et à propos de votre réponse, Postgresql prise en charge de SQL champscomposed_of
est idéal pour des choses comme l'argent. Il n'est pas clair si c'est la bonne chose ici, cependant. Et sur Postgres tableaux: voir stackoverflow.com/questions/8097750/... 🙂Migration:
Dans l'utilisation du modèle sérialiser:
Comme Marnen dit, dans sa réponse, il serait bon de savoir quel genre d'info que vous souhaitez stocker dans ce tableau, un sérialisé attribut peut ne pas être la meilleure option.
[Martre Veldthuis' avertissement] attention sur la modification du tableau sérialisé. Si vous modifiez directement comme ceci:
Qui fonctionne très bien, mais si vous faites cela:
Puis ActiveRecord ne les détecte pas que la valeur de thearray a changé. Dire AR à propos de ce changement, vous avez besoin pour ce faire:
Si vous utilisez Postgresql, vous pouvez utiliser ses Tableau fonctionnalité:
Migration:
Et puis il suffit de l'utiliser comme un tableau:
Cette approche a été mentionné par Marnen mais je pense qu'un exemple serait utile ici.