has_and_belongs_to_many (HABTM) associações no Rails 4

A associação HABTM em Rails é uma maneira limpa e muito poderosa de definir associações cruzadas múltiplas entre instâncias de dois modelos.

Leia aqui para determinar se é ou não a melhor solução para o seu projeto. Se for, aqui está um rápido tutorial sobre como implementá-lo.

Vamos dar um exemplo em que as indústrias podem ter vários setores e os setores podem pertencer a várias indústrias.

Em seu arquivo industry.rb (observe – use referências plurais para seus modelos ao definir a associação):

has_and_belongs_to_many :sectors

Em seu arquivo sector.rb:

has_and_belongs_to_many :industries

Agora crie uma tabela para mapear as associações (nota – certifique-se de usar referências em minúsculas para os modelos, pois isso garante que o nome da tabela segue a convenção esperada do Rails):

rails g migration CreateJoinTableIndustrySector industry sector

Vamos supor que desejamos apenas atribuir setores a indústrias por meio da visualização “_form” da indústria, então agora atualize sua visualização (observe – este exemplo usa slim e simple_form ).

= simple_form_for(@industry) do |f|
= f.input :name
...
= f.association :sectors, as: :select
= f.button :submit

e, finalmente, atualize seu controlador para considerar parâmetros fortes:

params.require(:industry).permit(:name, ... , sector_ids: [])

Agora execute “rake db: migrate” para criar sua tabela de junção, reinicie seu servidor e pronto 🙂