Question

Confusion générale J'ai des groupes qui peuvent avoir 3 genres. Je lis dans un précédent SO afficher la bonne façon de gérer cela est de quelques pas:

1) En band.rb

has_and_belongs_to_many :genres

2) Créer une table de jointure band_genres

Même après avoir lu la documentation, je suis un peu confus quant à ce HABTM signifie réellement. Je suppose que je pense juste normalement « un groupe a beaucoup de genres », a pas et appartient à beaucoup. Donc, une explication rapide de bas Dumbed ce serait génial.

Confusion avec Fixtures

En outre, lorsque vous faites mon appareil pour band_genres je

{ 
  "The Reaper Band and Funk": { "band": "The Reaper Band", "genre": "Funk" },
  "The Reaper Band and Rock": { "band": "The Reaper Band", "genre": "Rock" }  
}

Et je reçois une colonne de bande « inconnue ». Je pensais que des rails était censé savoir que « The Band Reaper » se réfère à une bande d'un dispositif de bande (même nom bien sûr) et saisirait que id et savoir que « bande » dans cet appareil se réfère à band_id dans la table de jointure . Je préférerais mes appareils ressembler à ceci que d'avoir des chiffres codés dur.

Confusion avec des usines

Quand je crée un groupe dans mon usine, je veux assigner genres:

Factory.define :band do |f|
  f.sequence(:name) { |n| "Band#{n}" }
  f.mailing_lists { |mailing_lists| [mailing_lists.association(:mailing_list)] }
  f.genres 2
end

Je me rends compte ici, je serais probablement besoin d'un genre_id codé en dur. Mais pourquoi ne regarde pas les rails à cela et dire « oh, il veut ajouter genre avec id = 2 à la table band_genres ».

Je ne m'y attendais pas des rails pour prendre soin de tout le sale boulot pour moi, mais je ne veux jouer par les règles.

Était-ce utile?

La solution

  1. A et appartient à un grand nombre définit la relation dans les deux sens. Si vous avez seulement besoin de voir ce que les genres de la bande appartient, has_many sera très bien. Si vous voulez savoir quels groupes sont « funk », vous pouvez utiliser HABTM pour permettre une recherche de bandes pour un genre donné.
  2. Pour les luminaires, dans des rails, vous pouvez maintenant faire HABTM sans créer un appareil séparé pour la table de jointure. Par exemple:

bands.yml:

reaper_band:
  name: The Reaper Band
  genres: funk, rock

genres.yml:

funk:
  name: Funk
  bands: reaper_band

rock:
  name: Rock
  bands: reaper_band
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top