[英]Helper method doesn't reload by `reload!` in rails console
我有一個這樣的幫助方法:
module PostsHelper
def foo
"foo"
end
end
然后在Rails控制台中檢查該功能,然后將文本"foo"
更改為"bar"
,然后reload!
控制台,但是helpers.foo
仍然不返回"bar"
。
也許像這樣的帖子已經在控制台中創建了Helper對象,但我不確定。 Rails控制台:重新加載! 沒有反映模型文件中的更改? 可能是什么原因?
我唯一想知道的是如何在Rails控制台中使用輔助方法。 你能告訴我怎么做嗎?
您是正確的, helper
代表一個已實例化的對象,因此不受reload!
調用的影響reload!
。 控制台中的helper
方法定義為:
def helper
@helper ||= ApplicationController.helpers
end
第一次調用helper
,它將記住ApplicationController
幫助器。 當您致電reload!
,將重新加載ApplicationController
類(及其助手),但helper
方法仍在查看舊實例。
您可以直接調用ApplicationController.helpers
,而無需使用helper
方法,並且在運行reload!
之后將看到所做的更改reload!
:
> helper.foo
# => "foo"
> ApplicationController.helpers.foo
# => "foo"
> # Change the return value of PostsHelper from "foo" to "bar"
> reload!
> helper.foo
# => "foo"
> ApplicationController.helpers.foo
# => "bar"
編輯
從Rails 5開始,這將不再是一個問題。 PR已合並以從helper
控制台方法中刪除便箋。
假設您有一個類似於以下的幫助器模塊:
module CarsHelper
def put_a_car_in(location)
if location == "your car"
puts "So you can drive while you drive!"
end
end
end
啟動一個Rails控制台,並創建helper-helper,您所要做的全部工作包括以下模塊:
>> include CarsHelper # It is not necessary to include module
=> Object
>> helper.put_a_car_in("your car") # simply write helper.your_method_name
So you can drive while you drive!
reload!
不工作,我也嘗試過。 您必須quit
rails console
,再次必須啟動rails c來檢查更改。希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.