Ruby on rails 3 如何从Rails 3中的视图更改控制器实例变量live
在我们的应用程序中,我们有一个gem,它为运行Rails应用程序的五个web站点提供通用代码。文件Ruby on rails 3 如何从Rails 3中的视图更改控制器实例变量live,ruby-on-rails-3,Ruby On Rails 3,在我们的应用程序中,我们有一个gem,它为运行Rails应用程序的五个web站点提供通用代码。文件lib/theme/controller\u module.rb中的gem中有以下代码: def application_javascripts(*items) @application_javascripts ||= [] @application_javascripts += items end def application_js_include_tag if @applicat
lib/theme/controller\u module.rb
中的gem中有以下代码:
def application_javascripts(*items)
@application_javascripts ||= []
@application_javascripts += items
end
def application_js_include_tag
if @application_javascripts
javascript_include_tag( *@application_javascripts)
end
end
文件helpers/theme\u helper.rb
中的gem中有以下代码:
def application_javascripts(*items)
@application_javascripts ||= []
@application_javascripts += items
end
def application_js_include_tag
if @application_javascripts
javascript_include_tag( *@application_javascripts)
end
end
主题gem位于每个应用程序的gem文件中。在控制器代码和帮助程序中,application\u javascripts
执行以跟踪页面上使用的特定于页面的JavaScript,并且application\u js\u include\u标记
放置在视图的底部,以仅提供这几个文件
不幸的是,一旦视图开始渲染,视图中的@application\u javascripts
值似乎不会更新。当在页面底部执行application\u js\u include\u tag
时,帮助程序中出现的对@application\u javascripts
的添加对视图不可用。我是否需要一个单独的助手,比如application\u javascripts
,其中定义了一个变量,并在application\u js\u include\u tag
中同时使用?还是其他解决办法 从其行为来看,似乎在渲染开始时拍摄了@application\u javascripts
的快照。在渲染期间执行controller.application\u javascripts
不会更改视图中可用的@application\u javascripts
的值。在helpers/theme\u helper.rb中定义:
def application_javascripts(*items)
controller.application_javascripts(*items)
end
也不会更改该值。工作原理是复制代码,以便驻留在helper文件中的代码更改@application\u javascripts
。在helpers/theme\u helper.rb中定义控制器代码的副本:
def application_javascripts(*items)
@application_javascripts ||= []
@application_javascripts += items
end
很好