我正在使用Draper将装饰器添加到多个模型中,我有一些装饰器用于一个模型(我的文档模型),我想用它来“装饰”另一个模型(我的用户模型)。我怎样才能做到这一点?
我已经尝试将它放在我的文档装饰器中,但它不起作用。
decorates_association :user
**[decorators here]**
class UserDecorator < ApplicationDecorator
decorates :user
end
并将其添加到我的用户控制器:
def show
@user = UserDecorator.find(params[:id])
end
提前谢谢!
答案 0 :(得分: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中定义的任何装饰器方法(名称,创建等)都可用于装饰用户和装饰文档。
我们有几个项目,我们使用类似的设置在多个模型之间共享装饰器方法,以获取日期和时间格式,状态等常见属性。希望这会有所帮助。
答案 1 :(得分:0)
您不想与其共享逻辑的其他模型可以直接从 Draper :: Decorator 继承,而不是从 ApplicationDecorator 继承。 只有5个模型应该继承自 ApplicationDecorator
@kovpack