在我的foo.rb
目录中名为/lib/
的文件中,它显示为:
module Foo
def some_method
@text_1 = "Hello!"
end
end
如何才能将此方法的结果显示在视图中?
我已经看到我需要在/config/application.rb
文件中包含以下行:
config.autoload_paths += %W(#{config.root}/lib
但是,我并不完全了解如何从保存在/lib/
目录中的文件中的模块传递变量 - 以显示在视图中。我很感激任何建议。
答案 0 :(得分:2)
为了在视图中显示该值,您需要了解如何在Ruby中使用模块。通常,通过包含或扩展模块将模块混合到其他类中。然后,这将使该方法可用于另一个类,然后可以在视图中引用该类。在您的情况下,您可能希望包含它,以便它可用于您放入的任何类的实例。假设您有一个名为MyClass的ActiveRecord模型,并且您包含Foo。然后,您可以在该模型的实例上调用my_method
,如下所示:
class MyClass < ActiveRecord::Base
include Foo
end
在您的控制器中:
class MyController
def new
@my_class = MyClass.new
end
end
在您看来:
@my_class.some_method
说了这么多,似乎可能有更好的方法去做你想做的事情:)
答案 1 :(得分:0)
是的。我同意 Beerlington。
你可以用其他方式做到, 不必将 config.autoload_paths + =%W(#{config.root} / lib 添加到应用程序文件中。因为默认情况下不会执行位于/ lib目录中的文件首先,当我们使用 rails s 运行应用程序时。 为了加载这些文件,我们需要在application.rb中包含该行。 否则,我们可以直接写如下,
在模型中,
需要'文件名'
类MyClass&lt;的ActiveRecord ::基
include Foo
端
在控制器中,
要求'foobar'
class BuyerController&lt; ApplicationController中
include Foobar
端
在foobar.rb中,
模块Foobar
def Foobar.foobar
"Hello world!"
端
端
在视图中,
&lt;%= Foobar.foobar%&gt; (您可以使用 Modulenmae.Methodname 直接调用该方法)