我想擴展Array的功能,添加一個方法來檢查數組中是否存在一個鍵,並確保該數組不是空的,在哪裏編寫該類以及如何確保它已加載?在rails應用程序中的類的位置
2
A
回答
2
標準的方式來做到這一點是將代碼放在lib/
,並確保它是由軌道自動加載通過添加一行config/application.rb
:在你的代碼
config.autoload_paths += Dir["#{config.root}/lib/**/"]
然後,只要確保你需要它,無論你用它。如果你想處處應用它,創造config/initializers
的初始化用一條線:
require 'my_array'
凡my_array.rb
是lib
,你有文件的文件名。這將使你的模型,控制器,提供意見等
參見:Best way to load module/class from lib folder in Rails 3?
此外,提防自動加載的紅寶石(不僅僅是Rails)的目錄結構的一個陷阱,在這個答案解釋:Best way to load module/class from lib folder in Rails 3?
3
您可以將其放入lib/
並確保它是自動加載的,如shioyama回答中所述;或者你可以把它放入初始化程序。我更喜歡初始化方法,因爲它更容易(您可以自由加載)。
我通常會在initializers
目錄下創建一個core_ext
子目錄,並將我的核心類擴展放在那裏。我總是試圖把正在擴展的類的什麼我添加到文件名的描述的名稱,所以在你的情況我會創建一個包含文件RAILS_ROOT/config/initializers/core_ext/array_my_function
:
module MyFunctionForArray
def my_function(arg1, arg2)
# ...
end
end
Array.send :include, MyFunctionForArray
我總是儘量不用重啓該類並直接擴展它,但將我的擴展插入到模塊中,然後將此模塊包含到類中以進行擴展。
相關問題
- 1. 把rails放到rails應用程序中的位置
- 2. 在rails應用程序中存儲ftp文件的位置
- 3. 在Rails應用程序中放置獨立類的公約
- 4. Android - 在我的應用程序中的位置監聽程序
- 5. 在rails中構建多位置應用程序
- 6. 在Rails應用程序中設置MySQL
- 7. 應用程序的位置在哪裏?
- 8. 在Android上的位置應用程序
- 9. 在Rails應用程序中放置自定義類的位置,以便它們在全球範圍內可用?
- 10. Rails應用程序::模型的默認文本的位置
- 11. Rails應用程序設置?
- 12. Rails應用程序設置
- 13. Yii應用程序放置外部API類的位置
- 14. Doodlz應用程序位置?
- 15. Android位置應用程序
- 16. 在Ruby on Rails中應執行rails應用程序的流程
- 17. 在Laravel應用程序中指定應用程序版本的位置?
- 18. 將應用程序邏輯放在Thruway應用程序中的位置?
- 19. 位於Rails應用程序中的.gitignore在哪裏?
- 20. 將應用程序設置放在JSF中的位置
- 21. 在WPF C#應用程序中設置默認值的位置?
- 22. 追蹤在PHP應用程序中設置了max_execution_time的位置
- 23. 默認文化在.NET應用程序中設置的位置
- 24. 在GWT Web應用程序中放置log4j.properties的位置
- 25. 在OOP應用程序中放置查詢的正確位置
- 26. FactoryGirl在Rails API應用程序中保存數據庫條目的位置?
- 27. Twilio在Rails應用程序中存儲TwiML(XML)文件的位置
- 28. 在Rails 4應用程序中顯示位置的最佳方式是什麼?
- 29. 將這些代碼放在Rails Web應用程序中的位置?
- 30. jpos.xml應該放在JavaPos Tomcat應用程序中的位置?
我也在做初始化工作,但我曾經重新開課。包含模塊而不是重新開放課程的方法是否有優勢? – rubyprince
在我看來,當你包含一個包含你所有擴展的模塊(你在原始類的祖先鏈中添加一個新的元素,而直接向類中添加X新的方法),你不會污染原始類。當你需要確定方法的定義位置時,它可以幫助你:'[1,2,3] .method(:my_function)'例如告訴你方法* my_function *來自模塊而不是類本身,因此使你更容易找到它... – severin
行..有道理..謝謝。 – rubyprince