2015-04-03 58 views
0

我在Rails应用程序的lib目录中有一个类,我希望能够使用我在ApplicationHelper中从该类内部创建的帮助器。我有以下几点:如何在常规Ruby类中包含Rails ApplicationHelper模块

module ApplicationHelper 

    def works 
    "Yay!" 
    end 

    def breaks 
    session[:username] 
    end 
end 

class MyClass 
    include ApplicationHelper 
end 

以下工作

MyClass.new.works 

这打破

MyClass.new.breaks 

我得到一个消息Rails的尝试委托sessioncontroller.session,但它不能做这是因为controller是零。

什么是包含ApplicationHelper的正确方法?

回答

0

问题不在于包含助手,而在于访问会话。

在正常情况下,ApplicationHelper自动包含在所有控制器中,而some of the ActionView methods - including session - are delegated to the controller存在于这种情况下。

当包含在普通的ruby类中时,没有controller;所以对这些方法的任何调用都会抛出一个错误,说明控制器是零。

不知道为什么你需要在常规ruby类中的会话信息。

+0

我不认为ApplicationHelper“自动包含在所有控制器中”。 ApplicationHelper中的方法在所有视图中都可用,但如果从控制器类调用,则这些方法将导致错误。 在我的特殊情况下,我试图创建一个配置对象,该对象与已经定义的帮助器配合良好(为配置对象赋予更多的权力,并限制需要在2个位置定义方法)。 – CodeSmith 2015-04-10 02:35:32

+0

我决定取消这个设计,并将我的配置类变成一个配置模块。我现在将我的配置模块包含到ApplicationHelper中,而不是试图将助手包含到我的课程中。我仍然想知道如何访问当前的控制器实例。我的配置对象是在application.html.erb布局文件中创建的。现在我想到了,我可以从当前视图获取控制器,并使用控制器初始化我的配置对象。这将会奏效。我仍然想知道是否有另一种方式。 – CodeSmith 2015-04-10 02:40:46