如何使辅助变量对第二个视图可见

时间:2014-07-30 03:51:34

标签: ruby-on-rails activerecord

我的应用程序中有两个非常相关的模型,并且我定义了一个辅助方法,它遍历模型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>`

1 个答案:

答案 0 :(得分:0)

看,我怀疑你的app确实需要全局变量(特别是在这种情况下)。但这是一个解决方案:

将方法gen_application(template)放在ApplicationController中(所有控制器通用)或放在两个控制器中的模块中。然后,如果您在控制器 Dragon 的操作 new 中需要此变量,则可以直接调用它,因为它继承了ApplicationController(或模块)。但是,如果您需要控制器 Rabbit 显示,您也可以调用它。如果您想在控制器中的每个操作之前使用它,请在ApplicationController中的 before_filter 回调中调用它。