我的应用程序中有两个非常相关的模型,并且我定义了一个辅助方法,它遍历模型A中的所有相关参数,将正确的参数存储到辅助方法中名为“appParams”的数组中,现在我'我想完全基于那些'appParams'创建一个新的B模型实例。
帮助方法:
module AppsHelper
def gen_application(template)
template=ApplicationTemplate.find(template.id)
appParams=[]
template.attributes.each do |name, value|
if value == true
appParams << name.to_s
end
end
appParams.map {|i| i.to_sym}
@appParams=appParams
end
end
我的问题是如何使@appParams变量对Model B的视图可见?现在,如果我在模型A的show
视图中显示@appParams的值,则会显示@appParams的值。但是,如果我在模型B的new
视图上进行相同的调用,则@appParams的值为空。
基本上问题是我如何才能使该变量对多个控制器和视图可见?
此作品:( /views/model_a/show.html.erb)
`<ul><li><%= gen_application(@template) %></li></ul>`
这不起作用[@appParams显示空白] :( /views/model_b/new.html.erb)
`<ul><li><%= @appParams %></li></ul>`
答案 0 :(得分:0)
看,我怀疑你的app确实需要全局变量(特别是在这种情况下)。但这是一个解决方案:
将方法gen_application(template)
放在ApplicationController中(所有控制器通用)或放在两个控制器中的模块中。然后,如果您在控制器 Dragon 的操作 new 中需要此变量,则可以直接调用它,因为它继承了ApplicationController(或模块)。但是,如果您需要控制器 Rabbit 的显示,您也可以调用它。如果您想在控制器中的每个操作之前使用它,请在ApplicationController中的 before_filter 回调中调用它。