Я ищу способ рельсов для реализации этого отношения класса / данных.
У меня есть следующее представление данных:
В родительском классе есть список детей.
Каждый дочерний класс имеет некоторые данные (например, create_at, updated_at и другие данные), а также один «класс данных», к которому он может получить доступ (либо мальчик, девочка, иностранец или любой другой класс, который я хочу добавить следующим ...) .
Можно предположить, что данные о мальчике, девочке, пришельце и любом другом классе, принадлежащем к ребенку, очень разные.
Это должен быть простой случай наследования, но оказалось довольно сложно найти подходящий пример. Я читал несколько о STI (у вас есть несколько типов элементов с похожими данными, поэтому они не подходят) и MTI (у вас есть тип данных, которые могут использоваться различными типами, например сообщения, которые могут быть на группа и человек, например, тип facebook), но я не смог найти простой пример, представляющий этот тип организации данных.
Пока у меня есть Child, который содержит тип id + для указания на конкретные данные (мальчик / девочка / инопланетянин), но я в основном должен сам все управлять, используя constantize.
Есть ли лучший способ обработки наследования?
class parent < ActiveRecord::Base
has_many :children
end
class child < ActiveRecord::Base
belong_to :parent
# has_one (???) -> use gettypeclass instead
def gettypeclass
# switch type, then constantize type and find instance id
end
end
class boy < ActiveRecord::Base
belong_to :child
def process()
# do something special
end
end
class girl < ActiveRecord::Base
belong_to :child
def process()
# do something special
end
end
class alien < ActiveRecord::Base
belong_to :child
def process()
# do something special
end
end
# now I can do something like
parent.children.first.gettypeclass.process()
Что-то вокруг этого для данных:
create_table :parent do |t|
t.timestamps
end
create_table :child do |t|
t.integer :parent_id
t.integer :data_id
t.integer :data_type
# some data
t.timestamps
end
create_table :boy do |t|
t.integer :child_id
# some data
end
create_table :girl do |t|
t.integer :child_id
# some data
end
create_table :alien do |t|
t.integer :child_id
# some data
end