Draper装饰器和应用程序控制器上的使用方法

时间:2013-12-11 13:33:10

标签: ruby-on-rails ruby

我的视图中有一些代码,用于测试用户是否使用应用程序控制器上的方法登录:

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>

现在,如果我想将此逻辑移动到装饰器,它将无法工作,因为装饰器无法在应用程序控制器上访问此方法。我需要这个在那里。所以我的问题是:处理这种情况的最佳方法是什么?逻辑可以从应用程序助手访问。有没有办法让我的装饰器对象访问此方法而不重复该方法两次?

1 个答案:

答案 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