Generátor HABTM migrácie

Databázová relácia has_and_belongs_to_many (HABTM) je používaná relatívne často. V Ruby on Rails ale neexistuje žiadny generátor, ktorý by poskytoval migráciu na prepájaciu tabuľku. Pri many-to-many relácii je nutnosťou. Riešenie?

Ruby gem habtm-generator – do rails projektu pridáva nový generátor.

Do Gemfile je potrebné pridať:

gem 'habtm_generator', group: :development

Následne zbundlovať:

$ bundle

Teraz už môžeme volať generátor a pohodlne robiť migrácie na prepájanie modelov:

$ rails g habtm post category

Predpokladáme, že máme dva modely – Post a Category. A konečne – príkaz generuje takúto migráciu:

# db/migrate/20170620035628_create_categories_posts.rb

class CreateCategoriesPosts < ActiveRecord::Migration
  def change create_table :categories_posts, :id => false do |t|
    t.references :category
    t.references :post
  end

  add_index :categories_posts, [:category_id, :post_id],
    name: "categories_posts_index",
    unique: true
  end
end

Migrácia automaticky obsahuje inštrukciu create_table s názvom tabuľky categories_posts. Aj keď sme uviedli názvy nie podľa abecedy, generátor ich tak zoradí ? Migrácia tiež vytvára index nad prepojeniami.

Migráciu spustíme príkazom:

rails db:migrate

V modeloch musíme mať zadefinovanú reláciu:

class Post < ApplicationRecord
  has_and_belongs_to_many :categories
end

class Category < ApplicationRecord
  has_and_belongs_to_many :posts
end

Čo ale gem robí automaticky a do oboch modelov pridá riadky za nás. Aké pohodlné! ?

Odteraz je HABTM v Ruby on Rails dúfam o čosi jednoduchšie. Ďakujem za čítanie!