0

Я надеюсь начать проект, используя наследование таблицы Multiple/Class в Rails. Для этого я планирую использовать Sequel вместо ActiveRecord. Документы можно найти здесь - Sequel - class table inheritanceНаследование таблицы классов Sequel

У меня есть плагин, работающий до некоторой степени, я могу вызвать child.first, и он даст мне первый из дочерних классов, который не является первым из родительского класса, и он включает данные из дочерней таблицы. Проблема в другую сторону ...

Так что, если я загрузить дб строку через родительский класс, который случается быть классом Child2

p = Parent.first <Parent @values = {kind = "Child2"}> 

, а затем попытаться получить ребенка данных с помощью команда обновления перечислены в документации он должен дать мне

p.refresh <Parent @values = {kind = "Child2", child2data = "data from child 2 table"}> 

но это не делает, он просто возвращает неизмененный родителя

Я включил модель карты в моем родительском классе

plugin :class_table_inheritance,:key=>"kind", :model_map=>{"Child1"=>:Child1,"Child2"=>:Child2} 

И я играл с разными ценностями и прочая бессмыслица, чтобы попытаться заставить его работать, но не удался.

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

p = Parent.first 
c = p.child 
c <Child2 @values = {kind: "Child2", Child2data: "data from child2 table"> 

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

У кого-нибудь есть ответ? для считывания

p.s. Я использую рельсы 5, рельсы-сиквел, и я работаю над проектом, который более или менее пуст, я просто хочу иметь приличную настройку CTI, потому что для меня это кажется намного более элегантным, чем полиморфные ассоциации.

ответ

0

Использовать :key=>:kind в вызове плагина, который должен исправить ваши проблемы. Если вы хотите использовать метод p.child, используйте ассоциации вместо плагина class_table_inheritance.

+0

Не решение, к сожалению, уже пробовало целую кучу настроек для ключа, включая это. Я не думаю, что ассоциации - это то, что я хочу - я хочу искать страницы по собственному uri, хранящимся в таблице верхнего уровня, и иметь несколько классов страниц для обработки определенного поведения и данных. Это кричит «Наследие» для меня, так как будет много повторных методов при необходимой независимости. Я не знаю, почему вы вообще не хотите загружать ребенка из родителя вообще, сохраняя класс родителя, это будет краевой случай. – Merry

+0

wait, дайте мне секунду, я могу просто заставить его работать – Merry

+0

Да, вы были на самом деле правы, я мог бы поклясться, что у меня было это настроенное для начала (а затем сменил его, пытаясь исправить вещи из-за путаницы), тогда, когда я попытался сменив его в первый раз. Также кажется, что при загрузке страницы он возвращает дочерний объект по умолчанию в любом случае, и это то, что я хотел, я просто почувствовал, что p.child - это более простой способ объяснить это. Он не работает идеально, но я надеюсь, что я больше не глуп и Я думаю, я могу это исправить ... может быть. К сожалению, я немного озадачен документацией по этому плагину, возможно, он может быть переделан, но я не хочу звучать как задница. ти. – Merry