簡體   English   中英

Helper方法不會在Rails控制台中通過`reload!`重新加載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM