Если тебе не нравятся belongs_to и has_many - значит ты просто не умеешь их использовать.

Large database schema 1895779 960 720
После 4 месяцев отдыха, решил найти в себе силы и рассказать, что же во мне поменялось.

Я был очень глупым rails разработчиком и не любил использовать связи в базе. С одной стороны я просто не понял их в свое время, связи казались каким то сложным механизмом и только запутывают тебя, но все-таки это не так.

 Во-первых "Связи" в rails - это соединения между моделями проекта. Если раньше, чтобы найти что то в базе связанное с другой моделью, то я писал
Model.find_by(model_2_id: 3)
то сейчас, мне достаточно просто вызвать объект из другого объекта:
model.model_2
Согласитесь намного удобнее и красивее, чем в первом варианте.

Что бы связи работали правильно надо сначала в голове выстроить цепочку, кто кому принадлежит

Везде приводят для понимания пример с автором и книгой - я тоже на нем продемонстрирую принцип

Есть один автор и он имеет в своей библиографии несколько книг, тогда нам необходимо сделать связь следующую:
class Author < ApplicationRecord
  has_many :books, dependent: :destroy
end
 
class Book < ApplicationRecord
  belongs_to :author
end
тогда в самом коде будет удобно посмотреть массив книг принадлежащих автору
author.books
=> [#<Book id: 1, name: "Книга 1", author_id: 1, created_at: "2017-12-01 10:44:48", updated_at: "2017-12-01 10:44:48">, #<Book id: 23, name: "Книга 23", author_id: 1, created_at: "2017-12-02 20:24:13", updated_at: "2017-12-02 20:24:13">]
а в случае, если вы хотите посмотреть кто автор книги вернется объект автора:
book.author
=> #<Author id: 1, name: "Писатель 1">

Так же в моделе "Автор" вы могли заметить dependent: :destroy - это указание зависимости, Благодаря которому при удалении автора из базы так же удалятся и все книги, которые привязаны к удаляемому автору.

Если делать еще более плотную связь, то помимо связи на уровне модели лучше добавлять еще связь на уровне базы данных сделав следующую миграцию:
class CreateLibrary < ActiveRecord::Migration[5.1]  
  def change
    create_table :authors do |t| 
      t.string :name
      t.timestamps
    end

    create_table :books do |t|
      t.belongs_to :author, index: true
      t.timestamps
    end
  end
end
Есть очень много интересных связей многих ко многих, связь двух таблиц через третью и т.д.
Более подробно что бы описать понадобится много статей, пока остановлюсь на том, что уже написал.
Надеюсь статья оказалась понятной и интересной.
Тем, кто хочет узнать большее советую почитать документацию по ссылке