Я понимаю, как вы можете использовать параметр class_name в активном каталоге для ссылки на модели пространств имен:
has_one :slide, :class_name => '::Refinery::Slides::Slide'
И как использовать полиморфные ассоциации
has_one :slide, :as => :slideable
Можете ли вы использовать их вместе?
has_one :slide, :class_name => '::Refinery::Slides::Slide', :as => :slideable
И если да, то как вы определяете полиморфную ассоциацию?
belongs_to :slideable, :polymorphic => true, class_name='::Refinery::Slideables::Slideable' #NO
Я работаю с RefineryCMS, и каждый добавленный вами движок получает пространство имен в Refinery :: PluralModel :: SingularModel. По сути, я хочу иметь возможность связать слайд либо с ситуацией, либо с работой. Вот актуальные модели.
module Refinery
module CaseStudies
class CaseStudy < Refinery::Core::BaseModel
attr_accessible :title, :description, :position
has_one :slide, :class_name => '::Refinery::Slides::Slide', :as => :slideable
end
end
end
module Refinery
module Works
class Work < Refinery::Core::BaseModel
attr_accessible :title, :description, :position,
has_one :slide, :class_name => '::Refinery::Slides::Slide', :as => :slideable
end
end
end
module Refinery
module Slides
class Slide < Refinery::Core::BaseModel
attr_accessible :slide_id, :caption, :position, :slideable_id, :slideable
belongs_to :slide, :class_name => '::Refinery::Image'
belongs_to :slideable, :polymorphic => true
end
end
end
Похоже, я могу сказать slide.slideable.title, но получаю сообщение об ошибке: undefined method `title 'для nil: NilClass
apidoc указывает, что inverse_of не может использоваться с полиморфизмом, но ничего не говорит о class_name