0

我正在使用 Draper 向多个模型添加装饰器,我有一些用于一个模型(我的文档模型)的装饰器,我想用它们来“装饰”另一个模型(我的用户模型)。我怎样才能做到这一点?

我试过把它放在我的文档装饰器中,但它不起作用。

decorates_association :user

**[decorators here]**

class UserDecorator < ApplicationDecorator
  decorates :user
end

并将其添加到我的用户控制器中:

def show
  @user = UserDecorator.find(params[:id])
end

先感谢您!

4

2 回答 2

1

看起来您已经设置了 ApplicationDecorator。如果你有想要在模型之间共享的装饰器方法,你可以将它们包含在你的 ApplicationDecorator 中,如下所示:

class ApplicationDecorator < Draper::Decorator
  def name
    model.name
  end

  def created
    model.created_at.strftime("%m/%d/%Y")
  end
end

如果你像这样设置你的 UserDecorator 和 DocumentDecorator:

class UserDecorator < ApplicationDecorator
  delegate_all
end

class DocumentDecorator < ApplicationDecorator
  delegate_all
end

然后 ApplicationDecorator 中定义的任何装饰器方法(名称、创建等)将可用于装饰用户和装饰文档。

我们有几个项目,我们使用类似的设置在多个模型之间共享装饰器方法,以获得日期和时间格式、状态等常见属性。希望这会有所帮助。

于 2014-01-10T15:39:48.490 回答
0

The other models which you would not like to share logic with could inherit directly from Draper::Decorator rather than from ApplicationDecorator. Only the 5 models should inherit from ApplicationDecorator

@kovpack

于 2016-06-21T07:40:41.093 回答