Domanda

confusione generale
Ho bande che possono avere 3 generi. Ho letto in un precedente SO inviare che la corretta modo per gestire questa situazione è un paio di passi:

1) In band.rb

has_and_belongs_to_many :genres

2) Creare un band_genres uniscono tabella

Anche dopo aver letto la documentazione, io sono un po 'confusi su cosa HABTM significa in realtà. Credo che vorrei solo normalmente pensare "una band ha molti generi", non ha e appartiene a molti. Quindi una spiegazione rapida dumbed giù di che sarebbe grande.

La confusione con il Calendario

Inoltre, quando facendo il mio appuntamento fisso per band_genres ho

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

E ho una colonna band "sconosciuto". Ho pensato rotaie doveva sapere che "The Reaper Band" rimanda ad una band di un apparecchio di banda (stesso nome ovviamente) e afferrava che id e sapere che "band" in questo apparecchio rimanda al band_id nella tabella join . Preferirei miei infissi simile a questa che si sono duramente i numeri in codice.

La confusione con le fabbriche

Quando creo una band nella mia fabbrica, voglio assegnare generi:

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

Mi rendo conto che qui avrei probabilmente bisogno di un genre_id hard coded. Ma perché le rotaie non sembra a questo punto e dire "Oh, vuole aggiungere genere con id = 2 al tavolo band_genres".

Non mi aspetto rotaie di prendersi cura di tutto il lavoro sporco per me, ma io voglio giocare secondo le regole.

È stato utile?

Soluzione

  1. Ha e appartiene a molti definisce il rapporto in entrambe le direzioni. Se avete solo bisogno di vedere ciò che generi la band appartiene, has_many andrà bene. Se volete sapere quali sono le bande "funk", è possibile utilizzare HABTM per permettere una ricerca di bande per un determinato genere.
  2. Per infissi, in Rails è ora possibile fare HABTM senza creare un appuntamento fisso separato per la tavola aderire. Ad esempio:

in bands.yml:

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

in genres.yml:

funk:
  name: Funk
  bands: reaper_band

rock:
  name: Rock
  bands: reaper_band
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top