Pergunta

confusão geral
Eu tenho bandas que podem ter 3 gêneros. Eu li em um anterior SO pós que o bom maneira de lidar com isso é algumas etapas:

1) Em band.rb

has_and_belongs_to_many :genres

2) Criar um band_genres unir a tabela

Mesmo depois de ler a documentação, estou um pouco confuso quanto ao que HABTM realmente significa. Eu acho que eu só iria normalmente pensamos "a banda tem muitos gêneros", não tem e pertence a muitos. Assim, uma rápida idiotizadas explicação do que seria ótimo.

Confusão com equipamentos

Além disso, ao fazer a minha fixação para band_genres Tenho

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

E eu recebo um "desconhecido" coluna banda. Pensei trilhos deveria saber que "The Reaper Band" remete para uma banda a partir de um dispositivo elétrico banda (mesmo nome, é claro) e iria pegar esse id e saber que "banda" neste dispositivo elétrico remete para band_id na tabela de associação . Eu prefiro meus luminárias parecido com isso do que ter números codificados.

Confusão com fábricas

Quando eu criar uma banda na minha fábrica, eu quero atribuí-lo 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

Eu percebo aqui eu provavelmente iria precisar de um genre_id codificado duro. Mas por que não trilhos olhar para isso e dizer "oh, ele quer adicionar gênero com id = 2 para a mesa de band_genres".

Eu não estou esperando trilhos para cuidar de todo o trabalho sujo para mim, mas eu quero jogar pelas regras.

Foi útil?

Solução

  1. Tem e pertence a muitos define a relação em ambas as direções. Se você só precisa ver o que genres da banda pertence, has_many vai ficar bem. Se você quer saber o que as bandas são "funk", você pode usar HABTM para permitir uma pesquisa de bandas para um determinado gênero.
  2. Para luminárias, em trilhos agora você pode fazer HABTM sem criar um acessório separado para a tabela de junção. Por exemplo:

em bands.yml:

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

em genres.yml:

funk:
  name: Funk
  bands: reaper_band

rock:
  name: Rock
  bands: reaper_band
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top