0

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

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

我怎样才能让这个方法的结果显示在视图中?

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

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

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

4

2 回答 2

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

说了这么多,似乎有更好的方法来做你想做的任何事情:)

于 2012-11-06T23:52:18.803 回答
0

是的。我同意比灵顿的观点。

您可以通过其他方式执行此操作,不必将config.autoload_paths += %W(#{config.root}/lib 添加到应用程序文件中。因为默认情况下位于 /lib 目录中的文件不会在我们使用rails s运行应用程序时首先执行。为了使这些文件能够被加载,我们需要在 application.rb 中包含该行。否则,我们可以直接编写如下,

在模型中,

需要“文件名”

类 MyClass < ActiveRecord::Base

 include Foo

结尾

在控制器中,

需要'foobar'

类购买者控制器 < 应用控制器

include Foobar

结尾

在 foobar.rb 中,

模块 Foobar

def Foobar.foobar

   "Hello world!"

结尾

结尾

鉴于,

<%= Foobar.foobar %> (可以直接使用Modulenmae.Methodname调用方法)

于 2012-11-07T06:03:40.530 回答