Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Draper装饰器及其在应用程序控制器上的使用方法_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Draper装饰器及其在应用程序控制器上的使用方法

Ruby on rails Draper装饰器及其在应用程序控制器上的使用方法,ruby-on-rails,ruby,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">

我认为有一些代码可以测试用户是否使用应用程序控制器上的方法登录:

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>


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

您可以访问helper
h

普通的Rails助手对于很多任务仍然很有用。双轨 提供的帮助程序和应用程序中定义的帮助程序可以在中访问 通过h方法的装饰器:

class ArticleDecorator
您可以访问helper
h.一些方法

普通的Rails助手对于很多任务仍然很有用。双轨 提供的帮助程序和应用程序中定义的帮助程序可以在中访问 通过h方法的装饰器:

class ArticleDecorator
你在装饰什么?你在使用这个gem吗,在方法调用前面加上“h”。就像这个h.logged\u?几分钟前确实有人回答了这个问题,但是帖子被删除了。我不知道为什么。。。然而,解决办法是在方法之前加上“h”。在我的情况下,应该是“h.logged_In?”谢谢!对您的问题理解不足,并认为答案不正确,如果答案正确,请确认答案。谢谢!你在装饰什么?你在使用这个gem吗,在方法调用前加上“h”。就像这个h.logged_?几分钟前确实有人回答了这个问题,但是帖子被删除了。我不知道为什么。。。然而,解决办法是在方法之前加上“h”。在我的情况下,应该是“h.logged_In?”谢谢!对您的问题理解不足,并认为答案不正确,如果答案正确,请确认答案。谢谢!
def link_to_edit_event
   h.link_to h.t('buttons.edit'), h.edit_event_path(id)
end
class ArticleDecorator < Draper::Decorator
  def emphatic
    h.content_tag(:strong, "Awesome")
  end
end