簡體   English   中英

在哪里放置自定義類,使它們全局可用於Rails應用程序?

[英]Where to put custom classes to make them globally available to Rails app?

我有一個類,我試圖在我的控制器中使用索引操作。

為了簡化它,它看起來像這樣

class PagesController < ApplicationController
  def index
    @front_page = FrontPage.new
  end
end

FrontPage是我定義的類。 要包含它,我將它放在/ lib /文件夾中。 我試圖require 'FrontPage'require 'FrontPage.rb'require 'front_page' ,並且每個都有前面的路徑,例如require_relative '../../lib/FrontPage.rb'

我一直收到以下消息之一: cannot load such file -- /Users/josh/src/ruby/rails/HNReader/lib/front_page或未uninitialized constant PagesController::FrontPage

我在哪里放這個文件/如何將它包含在控制器中,以便我可以實例化一個對象?

這是Rails 3.1.3,Ruby 1.9.2,OS X Lion

如果front_page.rb放在加載路徑中的某個位置,則應該能夠使用require 'front_page' 即:這應該工作:

require 'front_page'
class PagesController < ApplicationController
  def index
    @front_page = FrontPage.new
  end
end

要檢查加載路徑,請嘗試以下操作:

$ rails console
ree-1.8.7-2011.03 :001 > puts $:
/Users/scottwb/src/my_app/lib
/Users/scottwb/src/my_app/vendor
/Users/scottwb/src/my_app/app/controllers
/Users/scottwb/src/my_app/app/helpers
/Users/scottwb/src/my_app/app/mailers
/Users/scottwb/src/my_app/app/models
/Users/scottwb/src/my_app/app/stylesheets
# ...truncated...

您可以在此示例中看到,第一行是項目的lib目錄,這是您說front_page.rb所在的位置。

您可以做的另一件事是在config/application.rb

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

這應該是因為你甚至不需要這個require ; 相反,Rails會自動加載它(以及你的lib目錄中的其他所有內容,所以要小心)。

該文件名為FrontPage.rb 將名稱更改為“front_page.rb”,但將類名保留為“FrontPage”解決了該問題。

我們只需要加載文件,

class PagesController < ApplicationController
  require 'front_page.rb'
  def index
    @front_page = FrontPage.new
  end
end

LIB / front_page.rb

class FrontPage
end

我們還可以將application.rb設置為自動加載這些文件

# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)

第二種選擇是一種更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM