2017-01-24 6 views
0

У меня проблема в проекте, где у меня есть модель под названием Domain и еще две модели под названием Knowledge and Exercise. Домен содержит общие атрибуты и ассоциации Знаний и Упражнений, кроме того, Знания и упражнения сохраняют его собственные атрибуты и ассоциации. Домен может быть Знанием или Упражнением.Inheritance Ruby Controller

Я бы создать связь между последующей затем моделями и миграцией:

class Domain < ApplicationRecord 
    has_one :knowledge 
    has_one :exercise 
end 

class Knowledge < ApplicationRecord 
    belongs_to :domain 
end 

class Exercise < ApplicationRecord 
    belongs_to :domain 
end 

Он работает сейчас, но я не знаю, если это правильный подход, и я не знаю, какие шаги следуйте инструкциям для создания методов контроллеров для Знаний и Упражнений, потому что я должен создать там соответствующие домены раньше.

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

Большое вам спасибо за помощь!

+0

Вы также можете рассмотреть возможность использования STI. – max

ответ

1

has_one Имея отношение к Knowledge и Exercise в то же время в Domain не соответствует заявлению Домен может быть знания или упражнения.

Я бы предложил создать полиморфное отношение, чтобы лучше справляться с этой ситуацией.

class Domain < ApplicationRecord 
    belongs_to :implementation, polymorphic: true 
end 

class Knowledge < ApplicationRecord 
    has_one :domain, as: 'implementation' 
end 

class Exercise < ApplicationRecord 
    has_one :domain, as: 'implementation' 
end 

Таким образом достигается domain может иметь только одну реализацию (либо knowledge или exercise, и будет удовлетворять ваши потребности лучше. Конечно, вы можете переименовать implementation к тому, что вам нравится.

Надежда это отвечает на ваш вопрос.