2009-10-15 59 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 )。