【问题标题】:Helper method doesn't reload by `reload!` in rails console辅助方法不会通过 rails 控制台中的 `reload!` 重新加载
【发布时间】:2014-12-08 20:40:46
【问题描述】:
【问题讨论】:
标签:
ruby-on-rails
helper
rails-console
【解决方案1】:
helper 表示一个已经实例化的对象,因此不受对 reload! 的调用的影响,这是正确的。控制台中的helper方法定义为:
def helper
@helper ||= ApplicationController.helpers
end
第一次调用helper,它会记住ApplicationController 助手。当您调用 reload! 时,ApplicationController 类(以及它的助手)会重新加载,但 helper 方法仍在查看旧实例。
你可以直接调用ApplicationController.helpers而不是使用helper方法,运行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 was merged 用于从 helper 控制台方法中删除记忆。
【解决方案2】:
假设您有一个如下所示的辅助模块:
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! 不工作我也试过。您必须从 rails console 到 quit 并再次启动 rails c 以检查更改..希望对您有所帮助..