亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
在rails中如何加載自定義方法
[打印本頁(yè)]
作者:
中關(guān)村村草
時(shí)間:
2010-12-15 14:08
標(biāo)題:
在rails中如何加載自定義方法
這是一個(gè)我經(jīng)?吹降谋粏柤暗膯栴},為了一勞永逸,我決定解決它。將自定義的方法加載到rails應(yīng)用中,一般有幾種不同的方法。
首先,我們需要了解ruby一開始是如何加載的。在此,我簡(jiǎn)要描述一下ruby和rails提供的幾種不同的加載方式。
load:加載并執(zhí)行指定文件名的ruby程序
require:ruby會(huì)試圖加載庫(kù)文件,如果成功則返回true
require_dependency:開發(fā)模式下,每次請(qǐng)求會(huì)重新加載源文件。因此,修改代碼會(huì)影響下一次請(qǐng)求
require_or_load:這種方式不安全,而且可能會(huì)導(dǎo)致被加載兩次
因此,理想的方案是使用require_dependency,因?yàn)椋陂_發(fā)模式下,每次請(qǐng)求會(huì)重新加載源文件。要不然,你只有不斷的重啟服務(wù),那太瘋狂了!另外,在產(chǎn)品模式下,它只會(huì)加載一次。
那么,我們的代碼放哪兒才合適呢?rails加載路徑包括以下幾個(gè)目錄:app, lib, vendor and mock等,你必須在加載路徑中加入一個(gè)不同的路徑。
在config/environment.rb文件中的config.load_paths加入需要加載的路徑。
舉個(gè)例子:
Ruby代碼
config.load_paths += %W( custom )
復(fù)制代碼
這將會(huì)加載RAILS_ROOT/custom目錄,因此你可以使用該目錄下的所有文件。
將文件放在這個(gè)目錄下的問題是:雖然這些文件被加載了,但是你還是得在需要用的類里一個(gè)一個(gè)的require那些文件。一種替代方案是在rails環(huán)境中整體require所有的文件。
舉個(gè)例子,在我們的應(yīng)用中,我們需要擴(kuò)展String類。你可以在lib目錄下新建一個(gè)名為core的文件夾,如果需要,你可以將其他的一些ruby文件放入這個(gè)文件夾。
現(xiàn)在,我們?cè)趌ib/core目錄下新建一個(gè)ruby文件:string.rb
Ruby代碼
class String
def replace_name
self.gsub(/%name%/, "高海峰")
end
end
復(fù)制代碼
然后在lib目錄下再新建一個(gè)ruby文件:core_extensions.rb
Ruby代碼
module CoreExtensions
def require_core_ext
Dir["#{RAILS_ROOT}/lib/core/*.rb"].each do |f|
require_dependency f
end
end
end
Object.instance_eval { include CoreExtensions }
復(fù)制代碼
然后在application.rb中加入如下代碼:
Ruby代碼
include CoreExtensions
復(fù)制代碼
這樣core_extensions.rb才會(huì)被使用到。
現(xiàn)在你可以在需要用的類中調(diào)用require_core_ext,這樣String類就多出了一個(gè)自定義的方法:replace_name,如果需要在整個(gè)應(yīng)用中使用這個(gè)方法,可以在application.rb中加入require_core_ext
如果你修改了string.rb文件,那么刷新一下頁(yè)面就可以看到效果。你可以像這樣去使用它:
Ruby代碼
puts "%name%,你好!".replace_name
復(fù)制代碼
這將會(huì)輸出如下結(jié)果:高海峰, 你好!
原文轉(zhuǎn)自:
http://www.javaeye.com/topic/521123
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2