Pregunta

Confusión general
Tengo bandas que pueden tener 3 géneros. He leído en un anterior para enviar que la adecuada manera de manejar esto es un par de pasos:

1) En band.rb

has_and_belongs_to_many :genres

2) Crear una tabla de unión band_genres

Incluso después de leer la documentación, estoy un poco confundido en cuanto a lo que significa en realidad HABTM. Supongo que sería normalmente solo pensar en "una banda tiene muchos géneros", no tiene y pertenece a muchos. Por lo que una rápida explicación callados de que sería grande.

confusión con Calendario

Además, al hacer mi accesorio para band_genres tengo

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

Y consigo una columna de banda "desconocido". Pensé rieles se supone que deben saber que "The Reaper Band" se referiría a una banda de un dispositivo de banda (mismo nombre, por supuesto) y que agarrar ese Identificación y saber que "banda" en este accesorio se referiría a band_id en la tabla de unión . Yo prefiero mis accesorios de tener este aspecto que tienen números duro codificado.

Confusión con las fábricas

Cuando creo una banda en mi fábrica, quiero asignarle Géneros:

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

Me doy cuenta aquí que probablemente necesitará un genre_id duro codificado. Pero ¿por qué no raíles que miran y dicen "oh, que quiere añadir género con id = 2 a la mesa band_genres".

No estoy esperando carriles para cuidar de todo el trabajo sucio para mí, pero quiero jugar por las reglas.

¿Fue útil?

Solución

  1. tiene y pertenece a muchos define la relación en ambas direcciones. Si sólo necesita para ver lo que la banda géneros pertenece, has_many va a estar bien. Si desea saber qué bandas son "Funk", puede utilizar HABTM para permitir una búsqueda de bandas de un género determinado.
  2. Para los accesorios, en los carriles ahora se puede hacer HABTM sin crear un dispositivo separado para la tabla de unión. Por ejemplo:

en bands.yml:

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

en genres.yml:

funk:
  name: Funk
  bands: reaper_band

rock:
  name: Rock
  bands: reaper_band
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top