使用 Rails,我最初是在尋找一種users_path在模型中使用資源路徑輔助方法(例如)的方法,這給了我答案:我可以使用Rails.application.routes.url_helpers.users_path.
很好,但一般來說,我怎么知道方法來自哪個模塊/類?閱讀源代碼或一些官方檔案是找到它的唯一方法嗎?是不是有可能,例如,直接檢查在除錯控制臺中獲得Rails.application.routes.url_helpers從users_path?
uj5u.com熱心網友回復:
我認為您正在尋找類似于這個問題如何找到在運行時定義方法的位置?.
簡而言之,在 Ruby 2 中,以下(其中之一)將回傳檔案名和行號的 2 元素陣列:
method(:users_path).source_location
my_object.method(:my_method).source_location
# => ["/My/Ruby/Code/some-module.rb", 123]
然后,您可以計算出該方法的模塊或類名稱。
[在編輯中添加]
要獲取模塊名稱,您可以method(:users_path).owner改用:cf., Answer1和answer2。
然而,Rails 使用了很多元編程和動態賦值。問題中的 url-helperusers_path就是其中之一。
參考@spickermann 對問題的評論
users_path由元編程定義,因此您在代碼中根本找不到具有該方法名稱的方法定義。
參考@Stefan 對問題的評論
可能有多個這樣的物件。您必須確定與當前自我“最接近”的那個。
具體來說,url_helpers在actionpack-6.*/lib/action_dispatch/routing/route_set.rbRails 6.0中定義,您會看到該方法generate_url_helpers負責(動態)生成它。這就是為什么method(:users_path).owner回傳類似 的東西#<Module:0x0000000117346e18>,這并不是很有幫助。甚至method(:users_path).source_location只是簡單地指向
mod.define_method(name) do |*args|
(或類似的東西,取決于 Rails 版本),表示物件是動態生成的。
結果,我懷疑是否有任何簡單的方法來做到,所有匯出Rails的物件(類/模塊),也就是說,Rails.application.routes.url_helpers從像給定的輔助功能users_path。但是,使用諸如owner和之類的方法組合進行分析source_location將非常有助于確定它,并且在某些情況下可能會為您提供您正在尋找的答案。
我注意到,就這種特定情況而言,寫入的錯誤訊息actionpack-6*.*/lib/abstract_controller/url_for.rb會有所幫助 - 參考:
為了使用#url_for,您必須明確包含路由助手。例如,
include Rails.application.routes.url_helpers。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/386134.html
下一篇:FlaskAPI請求回傳舊錯誤
