2009-10-15 54 views

回答

15

更常见的做法是包裹类变量的helper方法:

# in /app/controllers/foo_controller.rb: 
class FooController < ApplicationController 
    @@bar = 'baz' 

    def my_action 
    end 

    helper_method :bar 

    def bar 
    @@bar 
    end 
end 

# in /app/views/foo/my_action.html.erb: 
It might be a class variable, or it might not, but bar is "<%= bar -%>." 
+0

几乎明显的解决方案,不知道为什么我没有选择这个在第一位 – 2009-10-16 18:08:27

3

不幸的是,类(@@variables)未复制到视图中。您仍然可以通过让他们:

controller.instance_eval{@@variable} 

@controller.instance_eval{@@variable} 

或别的东西,少毛。

有了Rails,100人中有99.9人不应该这样做,或者至少我不能想到一个好理由。

+0

虽然这不是我打算使用的,但它确实回答了我原来的问题 – 2009-10-16 18:11:18

1

罗森的回答是不错的,因为它隐藏变量“吧”是什么样的,但是如果你有很多这样的变量,需要定义一堆辅助方法是没有吸引力的。我用我的控制器中的以下内容:

@bar = @@bar ||= some_expensive_call 

这样一来,“some_expensive_call”只进行一次,并将结果复制到@bar每个实例(这样的观点就可以访问它@bar )。