Этот действительно заставляет меня чесать голову.Я работаю с полиморфными отношениями, связанными с несколькими классами, которые все наследуются от одного абстрактного класса.Это работает хорошо, но я сталкиваюсь с ошибкой, когда пытаюсь получить доступ к связанному объекту из полиморфных отношений.Вот моя реализация:
class Foo < ApplicationRecord
belongs_to :options, polymorphic: true
accepts_nested_attributes_for :options
def build_options(params)
self.options = options_type.constantize.new(params)
end
end
module Mod
class Option < ApplicationRecord
self.abstract_class = true
has_one :foo, as: :options
self.table_name_prefix
'foo_'
end
end
class Bar < Options
end
class Baz < Options
end
end
До сих пор это работало хорошо, но сейчас я сталкиваюсь с проблемой, когда пытаюсь что-то вроде этого:
Bar.first.foo
Я получаю эту ошибку:
ActiveRecord::AssociationNotFoundError (Association named 'foo' was not found on Foo::Bar; perhaps you misspelled it?)
Что делает меня странным, так это то, что если я позвоню Bar.first.methods
, я получу :foo
в качестве опции.
Любая идея, что мне нужно сделать, чтобыисправить это и все еще использовать наследование класса Options
?Я знаю, что могу просто определить has_one
на подклассах, но он применим ко всем дочерним элементам Options
, и если я смогу сохранить связь там, я бы хотел.
Редактировать: Сюжетгустеет!Немного поиграв, я понял, что у НЕКОТОРЫХ дочерних классов ассоциация работает, а у некоторых нет.Я также не могу найти разницу между классами, которые работают, и теми, которые не работают.