Comment puis-je semer un belongs_to association?
Je voudrais semences mon Products
et de les affecter à un User
et Store
.
Produit.rb
class Product < ActiveRecord::Base
belongs_to :user
belongs_to :store
def product_store=(id)
self.store_id = id
end
end
Remarque: Store
belongs_to Business
(:business_name
)
De semences.rb
C'est ma configuration de base:
user = User.create(:username => 'user', :email => '[email protected]')
store = Store.create(:business_name => 'store', :address => 'Japan')
J'ai essayé, mais n'ont pas de travail:
# This gives random ID's ranging from 1 to 4425!?
user.products.create([{:name => "Apple", :product_store => Store.find_by_address('San Francisco, USA')}])
# This gives me undefined method 'walmart'.
user.store.products.create([ {:name => "Apple"} ])
Est-il un moyen de définir l'ID de l'est si je peux associer mon Products
à un Store
et User
?
Mise à JOUR -
J'ai essayé les réponses ci-dessous et encore sortit d'échec. Personne ne sait d'une autre façon de le faire?
Vous avez attribué une instance d'une classe de Stocker une valeur entière de store_id .. :product_store => Magasin.find_by_address (San Francisco, etats-unis). Ce ne serait pas de travail.. vous devriez être en mesure d'utiliser Store.find_by_address('Japon').id au lieu
OriginalL'auteur LearningRoR | 2011-12-18
Vous devez vous connecter pour publier un commentaire.
Bien que cela sonne comme vous avez trouvé une solution de contournement, la solution peut être de l'intérêt pour les autres.
De vos graines d'origine.rb
Créer le magasin
Dans le code d'origine ciselée "utilisateur" et "store", les variables sont déclarées. Le code attribue user_id /store_id (les colonnes de modèle déduit par la belongs_to de la relation dans le modèle de Magasin) pour les valeurs d'id qui sont présents dans le "utilisateur" et "stocker" des variables.
"without_protection: true" désactive la cession en bloc de protection sur le champs id. Ce qui est parfaitement acceptable dans un graines de fichier, mais doit être utilisé avec une extrême prudence lorsque vous traitez avec de l'utilisateur fourni des données.
OriginalL'auteur denos
Ou sinon créez vos magasins.
Puis d'en extraire le bon
par exemple,
et ensuite créer sur la base que
par exemple,
Ce sera ensuite définir la relation id pour vous,
OriginalL'auteur Scott
Si je ne me trompe pas, vous êtes juste essayer de le faire.
Quelque chose ici que je ne suis pas voyant?
Quand j'ai mis
:store => walmart
rien ne se créé. Lorsque j'essaie:product_store => walmart
il fait la même chose que mon 2ème essai.OriginalL'auteur Max Chernyak
Essayer de faire ce
L'astuce est de ne pas mettre l'id dans la table de hachage, car elle est protégée.
Scott
OriginalL'auteur Scott
Ce que j'ai fait a été mise à jour le particulier produits pour un certain utilisateur, voir à cette question:
Puis-je mettre à jour tous mes produits à un utilisateur en particulier lorsque les semis?
OriginalL'auteur LearningRoR
Vous pouvez simplement créer une série d'insérer satements pour cette "semence de la migration", y compris l'Id d'enregistrement pour chaque utilisateur, en magasin, un produit, etc. Vous pourriez avoir à mettre à jour la base de données de séquences d'après cette approche.
Une autre approche
Créer l'initiale de dossiers en vous application Rails, par le biais de l'interface graphique /web.
Ensuite, utilisez quelque chose comme Yaml-db. De sorte que vous pouvez vider les données dans un fichier yaml. Vous pouvez maintenant éditer ce fichier (si nécessaire) et d'utiliser le même fichier à la semence d'un autre exemple de la bd avec "rake db:load"
.... Vous connaissez l'Id ne sera pas être en train de changer autour de vous lorsque ces objets sont créés dans la nouvelle instance db.
Je suis sûr qu'il ya d'autres façons de le faire... sans doute mieux, même.
Voici un lien vers une écriture-up, j'ai fait un tout à l'heure pour l'aide yaml_db amorçage d'une base de données oracle
http://davidbharrison.com/database_seeding_oracle
OriginalL'auteur dbh
Essayez ceci:
Le tableau devrait ressembler à ceci:
OriginalL'auteur Tarique