在Rails中的视图上的/ lib /目录中的文件中的方法中显示变量

时间:2012-11-06 23:06:55

标签: ruby-on-rails

在我的foo.rb目录中名为/lib/的文件中,它显示为:

module Foo
  def some_method
    @text_1 = "Hello!"
  end
end

如何才能将此方法的结果显示在视图中?

我已经看到我需要在/config/application.rb文件中包含以下行:

config.autoload_paths += %W(#{config.root}/lib

但是,我并不完全了解如何从保存在/lib/目录中的文件中的模块传递变量 - 以显示在视图中。我很感激任何建议。

2 个答案:

答案 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 直接调用该方法)