Полиморфный has_many_through в Rails - PullRequest
       15

Полиморфный has_many_through в Rails

0 голосов
/ 20 сентября 2018

У меня есть две модели Rails, и я бы хотел, чтобы между ними были установлены множественные отношения.У меня есть таблица с именем Intervention и модель с именем Subject.У меня также есть модель соединения под названием InterventionsSubject, которую я надеялся использовать, чтобы соединить их вместе.Я хотел бы связать между ними так, чтобы интервенции имели effective_subjects, ineffective_subjects и negative_subjects.Моя таблица настроена следующим образом (упрощено для краткости):

create_table "interventions", force: :cascade do |t|
  t.string "title"
  t.text "intro"
  t.text "how"
  t.text "studies"
end

create_table "subjects", force: :cascade do |t|
  t.string "title"
end

create_table "interventions_subjects", force: :cascade do |t|
  t.bigint "intervention_id"
  t.bigint "subject_id"
  t.integer "type"
  t.index ["intervention_id"], name: "index_interventions_subjects_on_intervention_id"
  t.index ["subject_id"], name: "index_interventions_subjects_on_subject_id"
end

Я пробовал несколько заклинаний, чтобы настроить это, но я не могу найти лучший способ сделать это.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Как я уже упоминал в комментарии выше, на самом деле это не полиморфные отношения.Я думаю, что вам нужны области, которые вы можете использовать как для поиска, так и для создания объектов.Взгляните на https://guides.rubyonrails.org/active_record_querying.html#scopes и https://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html#method-i-scope,, в которых есть много примеров.

Я думаю, вы хотите добавить области для своего поля type в intervention_subjects.Тогда вы сможете делать такие вещи, как intervention.subjects.effective.

0 голосов
/ 20 сентября 2018

Вы можете попробовать использовать полиморфную связь рельсов между вмешательствами и субъектами.Сделайте интервальную полиморфную таблицу, добавив что-то вроде subjectable_type и subject_id.Упомяните полиморфную ассоциацию в модели вмешательства - own_to: субъект и в модели субъекта has_many: вмешательства как:: субъект .обратитесь за дополнительной информацией: https://guides.rubyonrails.org/association_basics.html#polymorphic-associations Надеюсь, что это помогает.

...