0

我对 Rails 很陌生,并且正在尝试了解/lib/Rails 中的目录是如何工作的 - 以及如何引用/lib/目录中定义的变量以在视图中使用。

我有一个名为的文件helloworld.rb,它保存在 Rails 的 /lib/ 目录中。

helloworld.rb文件具有以下代码:

module HelloWorld
  def hello
    @howdy = "Hello World!"
  end
end

我希望能够在名为 的视图上显示此方法的结果index.html.erb,因此我在文件中包含以下代码index_helper.rb

module IndexHelper
  require 'helloworld'
end

另外,我在视图中包含以下代码index.html.erb

<%= @howdy %>

我错过了什么?

4

3 回答 3

1

您应该将这些行中的任何一行config/application.rb归档。

module [App name]
  class Application < Rails::Application
    # Dir.glob("./lib/*.rb").each { |file| require file } 
    # config.autoload_paths += %W(#{Rails.root}/lib)
  end
end

取消注释任何注释行。他们俩都做同样的工作。

Dir.glob查找 app 中的所有 .rb 文件,并要求 rails app 中的每个文件。

config.autoload_paths加载 lib 文件夹中的所有文件。

于 2012-11-05T20:32:21.637 回答
1

您需要调用 Helloworld::hello 以便它创建您的实例变量。

也许你可以把它放在你的控制器中的 before_filter

require 'helloworld'

class FooController < Application::Controller

  before_filter :setup_hello , [:only=>:create, :edit ]
  def create
     # whatever
  end
  def edit
     #whatever
  end
  def setup_hello
    HelloWorld::hello
  end
end

所以现在,每次您编辑或创建操作时,都会执行“setup_hello”,它会调用模块中的 hello 方法,并设置 @hello 实例变量。

于 2012-11-05T20:35:16.440 回答
0

您必须将 lib 文件夹添加到 config/application.rb 中的自动加载路径

# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/lib)
于 2012-11-05T20:12:35.370 回答