亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3449 | 回復(fù): 0
打印 上一主題 下一主題

在rails中如何加載自定義方法 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-12-15 14:08 |只看該作者 |倒序?yàn)g覽
這是一個(gè)我經(jīng)?吹降谋粏柤暗膯栴},為了一勞永逸,我決定解決它。將自定義的方法加載到rails應(yīng)用中,一般有幾種不同的方法。


首先,我們需要了解ruby一開始是如何加載的。在此,我簡要描述一下ruby和rails提供的幾種不同的加載方式。

load:加載并執(zhí)行指定文件名的ruby程序
require:ruby會(huì)試圖加載庫文件,如果成功則返回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代碼
  1. 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代碼
  1. class String  
  2.   def replace_name   
  3.     self.gsub(/%name%/, "高海峰")   
  4.   end  
  5. end
復(fù)制代碼
然后在lib目錄下再新建一個(gè)ruby文件:core_extensions.rb

Ruby代碼
  1. module CoreExtensions
  2.   def require_core_ext
  3.     Dir["#{RAILS_ROOT}/lib/core/*.rb"].each do |f|
  4.       require_dependency f
  5.     end
  6.   end
  7. end
  8. Object.instance_eval { include CoreExtensions }
復(fù)制代碼
然后在application.rb中加入如下代碼:

Ruby代碼
  1. 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文件,那么刷新一下頁面就可以看到效果。你可以像這樣去使用它:

Ruby代碼
  1. puts "%name%,你好!".replace_name  
復(fù)制代碼
這將會(huì)輸出如下結(jié)果:高海峰, 你好!

原文轉(zhuǎn)自:http://www.javaeye.com/topic/521123
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP