Проблема присоединения к столу с рельсами 6 - PullRequest
1 голос
/ 17 октября 2019

У меня есть цветовая модель:

class Color < ApplicationRecord
  belongs_to :sector

Секторная модель:

class Sector < ApplicationRecord
  has_many :colors

Я создал таблицу соединений, как:

class CreateJoinTableColorSector < ActiveRecord::Migration[6.0]
  def change
    create_join_table :color, :sectors do |t|
      t.index %i[color_id sector_id]
      t.index %i[sector_id colore_id]
   end
 end
end 

Теперь я хочучтобы получить все цвета, которые принадлежат к определенному сектору. Я пытался:

Color.joins(:sectors).where({ sector: sector })

Но он возвращает мне ошибку → uninitialized constant Color::Sectors

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Если у вас есть модель Color, например:

# == Schema Information
#
# Table name: colors
#
#  id           :integer          not null, primary key
#  created_at   :datetime         not null
#  updated_at   :datetime         not null
#
class Color < ApplicationRecord
  has_many :color_sectors
  has_many :sectors, through: :color_sectors  
end

И модель Sector, например:

# == Schema Information
#
# Table name: sectors
#
#  id           :integer          not null, primary key
#  created_at   :datetime         not null
#  updated_at   :datetime         not null
#
class Sector < ApplicationRecord
  has_many :color_sectors
  has_many :colors, through: :color_sectors
end

Затем вы создаете модель ColorSector, например:

# == Schema Information
#
# Table name: color_sectors
#
#  id           :integer          not null, primary key
#  color_id     :integer
#  sector_id    :integer
#  created_at   :datetime         not null
#  updated_at   :datetime         not null
#
class ColorSector < ApplicationRecord
  belongs_to :color
  belongs_to :sector
end

И когда у вас есть @color и вы хотите получить все связанные Sector записи, вы можете сделать:

@color.sectors

И когда у вас есть @sectorи вы хотите получить все связанные Color записи, вы можете сделать:

@sector.colors

Если вы хотите связать @color с @sector, то вы делаете:

@sector.colors << @color

Все это подробно описано в документах .

0 голосов
/ 17 октября 2019

Если вам нужны отношения многие-ко-многим, используйте has_and_belongs_to_many ассоциация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...