0

Я прыгал между шаблонами проектирования, сначала пытаясь полиморфными, теперь приземляясь на STI. Основная цель состоит в реализации модели Server> Host> Guest, в которой сервер имеет хосты, хосты имеют гостей, и каждый из них может иметь сообщения. Хотя это и не основная цель вопроса, любые идеи в вопросе проектирования были бы полезны, поскольку это мой первый рельс или рубиновый проект.Рельсы 4 маршрута с одиночным наследованием наценок и самооценками

То, что я сейчас:

class Device 
    has_may :children, :class_name => "Device", :foreign_key => "parent_id" 
    belongs_to :parent, :class_name => "Device" 

    has_many :posts 
end 

class Server,Host,Guest < Device 
end 

STI используется потому, что сервер, Host, Guest в основном имеют те же атрибуты.

У меня возникли проблемы с настройкой маршрутов и контроллеров, чтобы я мог просматривать дочерние объекты сервера, которые будут иметь тип Host или создать новый серверный узел.

ответ

0

Во-первых, хорошо было бы добавить следующие вещи, что делает все проще в использовании для вас:

class Device < ActiveRecord::Base 
    has_many :children, :class_name => "Device", :foreign_key => "parent_id" 
    has_many :servers, -> { where type: "Server" }, :class_name => "Device", :foreign_key => "parent_id" 
    has_many :hosts, -> { where type: "Host" }, :class_name => "Device", :foreign_key => "parent_id" 
    has_many :guests, -> { where type: "Guest" }, :class_name => "Device", :foreign_key => "parent_id" 
    belongs_to :parent, :class_name => "Device" 

    has_many :posts 
end 

При том, что вы будете в состоянии сделать server.hosts, и т.д., что достаточно удобно.

Затем вы должны переместить каждый подкласс (Сервер, Хост, Гость) в свой собственный файл из-за системы загрузки Rails. Вы можете попытаться получить доступ к серверу модели в консоли, вы получите неопределенную ошибку. Чтобы исправить это, вам нужно загрузить устройство модели или просто переместить каждый подкласс в другой файл.

Наконец, для части маршрутизации/контроллера я советую вам прочитать это сообщение, которое я написал об общем контроллере для ресурсов STI: http://samurails.com/tutorial/single-table-inheritance-with-rails-4-part-2/.

Обратите внимание, что это вторая часть, для более подробной информации ознакомьтесь с другими статьями.