2012-11-06 60 views
1

這是與以前的帖子我做了一個發展的問題...使用/ lib目錄/子目錄導軌 - 用於查看內容

我玩弄一些 - 嘗試學習如何/lib/目錄Rails的作品 - 以及如何引用/lib/目錄中定義的變量以在視圖中使用。

我有一個名爲helloworld.rb文件,它保存在Rails中/lib/hellotest/目錄。

helloworld.rb文件有以下代碼:

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

我希望能夠顯示這些方法的一種稱爲index.html.erb視圖的結果,所以包括在index_helper.erb文件以下代碼:

module IndexHelper 
    require 'helloworld' 
end 

我瞭解到,我需要包括的代碼在/config/application.rb文件以下行:

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

另外,我包括在視圖index.html.erb下面的代碼:

<%= @howdy %> 

我想我可能已經找到了,是造成問題。我不想在啓動,所以我把文件中的一個名爲/lib/hellotest/子目錄加載整個/lib/目錄。我讀過了Rails在lib文件夾中解釋模塊/類命名約定的一些問題,但我無法弄清楚。我看到關於這一可能的解決我的問題上William B Harding's Blog一個很好的資源,在2點 - 但我不能完全解決這個問題的解決方案我的懷裏,因爲它涉及到我的問題。

有什麼建議嗎?

我錯過了什麼?

回答

0

我建議,除非你有一個很好的理由不這樣做,按照模塊和類的常規命名(如你所提供的link描述)。重命名helloworld.rbhello_world.rb,其移動到lib,並改變你的autoload_paths到:你IndexHelper模塊中

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

最後,改變require 'hello_world'require 'hello_world'。然後它應該正常加載。

+0

使用你的建議 - 我覺得我越來越近了,但結果還是不要在視圖中。在實際的觀點中,我應該做些什麼不同的事情? – 2scottish

+0

抱歉沒有注意到問題的一部分。首先,不要使用與文件內容不匹配的擴展名。您不應該使用.erb作爲帶有Ruby代碼的文件,它應該具有擴展名.rb。但實際上並不需要該文件,您可以直接在'ApplicationController'中包含'HelloWorld'模塊,然後添加一行'helper_method:hello',以使hello'方法在您的視圖中可用。 –

+0

作爲參考,這裏是[helper_method'的文檔](http://apidock.com/rails/v3.2.8/AbstractController/Helpers/ClassMethods/helper_method)和相關的[SO問題/答案](http: //stackoverflow.com/questions/4455583/rails3-how-do-i-make-a-custom-helper-available-to-controllers-and-views)。 –