СОЗДАЕМ СВЯЗЬ HABTM (has_and_belongs_to_many)
Связь has_and_belongs_to_many создает связь многие-ко-многим с другой моделью. Например, ваше приложение включает подарки (gifts) и сладости (sweets), где каждый подарок включает в себя много сладостей, и каждая сладость встречается во многих подарках.
Создаем две модели:
rails g model sweet title:string rails g model gift name:string
Выполним миграцию:
rake db:migrate
Создадим новую миграцию для соединительной таблицы:
rails g migration create_join_table sweet gift
Проверьте, что ваша миграция выглядит правильно:
class CreateJoinTable < ActiveRecord::Migration def change create_join_table :sweets, :gifts do |t| t.index [:sweet_id, :gift_id] t.index [:gift_id, :sweet_id] end end end
Выполните миграцию:
rake db:migrate Теперь добавьте связи к моделям:
# models/sweet.rb class Sweet < ActiveRecord::Base has_and_belongs_to_many :gifts end # models/gift.rb class Gift < ActiveRecord::Base has_and_belongs_to_many :sweets end
Использование связи HABTM
Запустим rails console:
rails c
Создадим экземпляр модели Gift:
gift = Gift.create(name: "For Udjin")
Создадим новую сладость, которая окажется в подарке:
gift.sweets.create(title: "Chocolate")
Создадим новую сладость без привязки к подарку.
sweet = Sweet.create(title: "Cake")
Положим сладость в подарок:
gift.sweets << sweet
Поздравляю, теперь можете подарить подарок.
Постойте, этот chocolate выглядит так вкусно.
Давайте оставим его себе:
gift.sweets.delete( Sweet.find_by_title(’Chocolate’) )
Проверим сколько сладостей осталось в подарке:
gift.sweets.map(&:title)
>> ["Cake"]













