рельсы 4 принадлежат одной и той же модели - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть модель Opportunity, которая принадлежит_ модели раздела. Секция has_many возможностей.

class Opportunity < ActiveRecord::Base

  belongs_to :section
class Section < ActiveRecord::Base

  has_many :opportunities

Модель возможности должна иметь section_id, но я хотел бы иметь возможность иметь много секций в качестве вовлеченных секций в некоторых случаях.

как бы это можно создать? спасибо

1 Ответ

1 голос
/ 24 февраля 2020

Вам нужна связь между многими, Opportunity и Section, для этого вам нужно создать соединительную таблицу между ними, создать миграцию

create_table :opportunities_sections, id: false do |t|
  t.belongs_to :opportunity
  t.belongs_to :section
end

Затем в * Модель 1006 *, добавьте эту строку

has_and_belongs_to_many :sections

В модели Section добавьте эту строку

has_and_belongs_to_many :opportunities

Наконец, удалите столбец section_id из таблицы opportunities.

Более подробная информация о has_and_belongs_to_many ассоциации здесь

https://guides.rubyonrails.org/association_basics.html#the -на-и-принадлежит-многим-ассоциации

Вы также можете достичь many-to-many ассоциация через has_many through ассоциация, основная c разница между has_and_belongs_to_many и has_many through в том, что вы можете создать класс модели для соединительной таблицы, таким образом вы получите больше гибкости в плане сохранения любых дополнительных данных с помощью соединения , Более подробная информация здесь

https://guides.rubyonrails.org/association_basics.html#the -на много-через-ассоциацию

Что выбрать?

https://guides.rubyonrails.org/association_basics.html#choosing -в промежутке -х-много-через-и-имеет-и-принадлежит-многим

Направляющие Rails получили все ответы!

...