【发布时间】:2019-10-24 22:00:23
【问题描述】:
因为我是 Rails 世界的初学者,所以我对这些术语有点迷失了...... 我的标题中有一些代码,与模型无关。我只想根据用户所在的页面显示或不显示。 我知道这有点简单,助手也会做得很好,但是是否可以将代码放入演示者或装饰者中? 我什么时候必须使用它们?我还真没看懂。
【问题讨论】:
标签: ruby-on-rails-5 decorator presenter
因为我是 Rails 世界的初学者,所以我对这些术语有点迷失了...... 我的标题中有一些代码,与模型无关。我只想根据用户所在的页面显示或不显示。 我知道这有点简单,助手也会做得很好,但是是否可以将代码放入演示者或装饰者中? 我什么时候必须使用它们?我还真没看懂。
【问题讨论】:
标签: ruby-on-rails-5 decorator presenter
tl;博士: 在这种情况下使用 Presenter
阐述: 装饰器是一种结构设计模式,它包装其他对象并添加新功能,而无需扩展您正在装饰的类。
另一方面,Presenter 应该使用您正在展示的对象的方法,以您希望展示的方式格式化数据。例如。你有一个User 模型:
class User < ActiveRecord:Base
# it has first_name and last_name columns
end
并且您想在视图中显示全名而没有太多逻辑。您可以像这样创建UserPresenter 类:
class UserPresenter
def initialize(user)
@user = user
end
def full_name
"#{@user.last_name} #{@user.first_name}"
end
end
因此,您无需分别调用这两个属性,只需使用演示者即可
user = User.new(first_name: "John", last_name: "Doe")
user_presenter = UserPresenter.new(user)
user_presenter.full_name #=> "Doe John"
【讨论】: