Одна родительская таблица, две дочерние таблицы - PullRequest
0 голосов
/ 12 января 2019

У меня есть следующая проблема, которую я пытаюсь смоделировать в приложении Rails только для API. A Business может иметь много Programs. Program имеет ряд основных атрибутов. Тем не менее, существует множество типов Program, скажем, ProgramA и ProgramB и т. Д., Каждый со своими атрибутами.

Мне потребуется запросить все программы, принадлежащие Business, и вернуть его клиенту вместе с «типом» программы, чтобы ее можно было правильно проанализировать.

Как мне смоделировать это отношение в Rails 5?

1 Ответ

0 голосов
/ 12 января 2019

Это общий шаблон наследования ИППП:

# app/models/business.rb
class Business < ActiveRecord::Base 
    has_many :programs 
end

# app/models/program.rb
class Program < ActiveRecord::Base 
    belongs_to :business 
    self.inheritance_column = :type 

    #Defining subclasses
    def self.types
      %w(A B C)
    end
end

# app/models/a.rb
class A < Program; end

# app/models/b.rb
class B < Program; end

# app/models/c.rb
class C < Program; end

У вас есть две таблицы: таблица businesses и таблица programs. Таблица программ имеет столбец type, который соответствует типу программы, который имеет те же другие свойства, что и любой другой тип. Тогда каждый тип программы может иметь определенные атрибуты, которые есть только у него. Rails и activerecord обрабатывают это автоматически, с несколькими оговорками, которые вы можете найти в Интернете.

Это хороший способ, если ваши программы имеют много общих атрибутов, а не так хорошо, если они не имеют.

Некоторые материалы для чтения: https://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html

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