0

私はSTIモデルを持っています

#a/m/document.rb
class Document < ActiveRecord::Base
end

#a/m/document/static.rb
class Document::Static < Document
end

#a/m/document/dynamic.rb
class Document::Dynamic < Document
end

モデルを装飾するために draper gem を使用しています

# a/d/document_decorator.rb
class DocumentDecorator <  ApplicationDecorator
end

 # a/d/document/static_decorator.rb
 class Document::StaticDecorator < DocumentDecorator
   def foo
     'it works 1'
   end
 end


 # a/d/document/dynamic_decorator.rb
 class Document::DynamicDecorator < DocumentDecorator
   def foo
     'it works 2'
   end
 end

適切な STI クラスのデコレータでモデルを自動的に装飾するように draper に指示する方法はありますか? このような:

a = Document.last   #<Document::Static ...
a.type              #Document::Static
b = DocumentDecorator.decorate(a)
b.class             # Document::StaticDecorator
b.foo               # "it works 1"
4

1 に答える 1

0

私ができることを発見するのに時間がかかりました

resource.decorate

そして、それは適切なデコレータを見つけます

a = Document.last   #<Document::Static ...
a.type              #Document::Static
b = a.decorate          
b.class             # Document::StaticDecorator

ドキュメントデコレータでオブジェクトを明示的に装飾する必要がある場合は、これを行います

a = Document.last   #<Document::Static ...
a.type              #Document::Static
b = DocumentDecorator.decorate a
b.class             # DocumentDecorator
于 2012-08-22T10:26:09.287 に答える