我正在使用命名空间的 Presenter 对象来帮助重构我的模型属性的一些视图表示逻辑。
对于从控制器发送的一个对象,我会做
@user = Users::UserPresenter.new(@user)
这很好用。对于用户查询,我创建了一个 .present() 方法,该方法将 UserPresenter.new 映射并应用到每个用户,所以我这样做了
@users = Users::UserPresenter.present(users)
这很好用。但是,当我传递一个对象,然后遍历视图中的关系时呢?一个简单的例子是
<% appointment.users.each do |user| %>
<% user = Users::UserPresenter.new(user) %>
<li> <%= user.age%></li>
<% end %>
一个更复杂的例子是
<% appointment.appointment_host.family.users.each do |user| %>
<% user = Users::UserPresenter.new(user) %>
<li> <%= user.age%></li>
<% end %>
user_presenter.rb
module Users
class UserPresenter < SimpleDelegator
# methods
end
end
我不喜欢在视图中设置 Presenter 对象。有什么更好的方法来处理这个问题?理想情况下使用与我到目前为止类似的模式。