У меня есть простые has_many/belongs_to отношения между Отчетом и Диаграммой. Проблема, которую я имею, - то, что моя модель Chart является родителем, который имеет детей.
Таким образом в моей модели Report я имею
class Report < ActiveRecord::Base
has_many :charts
end
И моя модель Chart является родителем, где Круг, Строка, Панель все наследовались Диаграмме. Я не уверен где belongs_to: отчет принадлежит в рамках модели диаграммы или детей модели диаграммы. Я получаю ошибки, когда я пытаюсь получить доступ к chart.report, потому что объект имеет тип "Класс"
неопределенная локальная переменная или метод 'сообщают' для # <Class:0x104974b90>
Модель Chart использует STI, таким образом, его получение по запросу говорит.. 'Пол' из chart_type столбца в таблице диаграмм.. что я пропускаю?
Править
Chart
/ \
Pie Line
/ \
/ \
Gender Sex
Я (использующий STI) инстанцирование объекта Пола типа или Пола. Надо надеяться, это помогает немного больше.
У меня есть чувство что его вызванный
@chart.update_attributes(params[:chart])
потому что при представлении на самом деле параметрические усилители [: диаграмма] ее параметрические усилители [: пол] или параметрические усилители [: пол]
Ваша проблема в том, что у вас есть один контроллер, который принимает все эти разные типы моделей. Когда вы используете помощники форм Rails, они берут тип объекта из экземпляра и используют его для заполнения параметров. Это означает, что у вас есть params [: пол]
вместо params [: chart]
. Вы можете исправить это, переопределив метод, который Rails использует для генерации формы. Поместите следующий код в свой базовый класс диаграммы:
def self.model_name
name = "chart"
name.instance_eval do
def plural; pluralize; end
def singular; singularize; end
end
return name
end
Теперь любой класс, который является дочерним для Chart, будет передан в ваше действие приема как params [: chart]
Имейте в виду, что изменение имени объекта как я обрисовал выше, может нарушить функциональность некоторых плагинов / драгоценных камней, которые на него полагаются. Вам следует подумать о наличии нескольких контроллеров. Вместо ChartsController
для получения всех данных используйте GenderChartsController
и LineChartsController
. Это дает два преимущества:
Если все типы диаграмм принадлежат одному отчету, то поместите
belongs_to :report
в родительскую модель (в вашем случае это Chart Model, я полагаю).
Вы должны иметь возможность использовать только
class Report < ActiveRecord::Base
has_many :charts
end
class Chart < ActiveRecord::Base
belongs_to :report
end
и вызвать
@chart.report
@pie.report
@line.report
@bar.report
Ваш столбец chart_type
необходимо переименовать только в тип
, если вы явно не перезаписали Base.inheritance_column
.
Вы явно переименовали столбец наследования одной таблицы в chart_type
?