我的视图中有一些代码,用于测试用户是否使用应用程序控制器上的方法登录:
def logged_in?
!!current_user
end
我在视图上使用此方法仅在用户登录时才显示某些信息。
<%= **logged_in?** ? link_to('+', upvote_post_path(post), method: 'post', remote: true) : '+' %>
<span id = "post-<%= post.slug %>-votes"> <%= post.total_votes %></span>
现在,如果我想将此逻辑移动到装饰器,它将无法工作,因为装饰器无法在应用程序控制器上访问此方法。我需要这个在那里。所以我的问题是:处理这种情况的最佳方法是什么?逻辑可以从应用程序助手访问。有没有办法让我的装饰器对象访问此方法而不重复该方法两次?
答案 0 :(得分:3)
您可以访问助手h.some_methods
def link_to_edit_event
h.link_to h.t('buttons.edit'), h.edit_event_path(id)
end
来自Draper
普通Rails助手仍然可用于许多任务。两个Rails&#39; 提供的助手和您应用中定义的助手可以在其中访问 通过h方法的装饰器:
class ArticleDecorator < Draper::Decorator
def emphatic
h.content_tag(:strong, "Awesome")
end
end