2014-09-23 65 views
0

渲染部分Ruby Slim模板時,我在引擎模塊中嵌入了一個輔助方法。破舊例如:Ruby Slim:在Ruby引擎模塊中訪問本地分配

ruby: 
    def new_record_form? 
    object.new_record? 
    end 

這裏,object是一個本地分配的變量,可以在常規超薄代碼中使用,但並不在發動機缸體的範圍內訪問。此外,local_assigns也不可用。 如何訪問傳遞給這個塊內部分的變量?

回答

2

這是Ruby的正常行爲,一種方法不能以這種方式訪問​​範圍之外的局部變量 - 事實上,擁有這樣一種方法是相當不尋常的。

定義一個類,例如:

class Foo 
    object = 7 

    # use object in some way in defining the class... 

    def bar 
    # object not available here 
    puts object 
    end 
end 

這裏bar有沒有辦法訪問object方法時,你可能會看到這樣的事情。

紅寶石也允許的語法像這樣的,這是更接近你的時候修身代碼被編譯什麼是你的情況發生了:

def foo 
    object = 7 

    def bar 
    puts object 
    end 

end 

但是請注意,這不是嵌套的方法,例如,調用foo導致在同一對象上定義bar,但object變量在bar中不可用,並且調用bar將導致錯誤。

爲了從像這樣的內部方法訪問變量,他們需要是實例變量。在您的例子會是這個樣子:

- @object = ... 
ruby: 
    def new_record_form? 
    @object.new_record? 
    end 

注意的是,一般的建議是,在你的模板的實際代碼保持在最低水平。您可能希望將此方法移到幫助器中 - 實例變量將從此處可用。

+0

這個範圍很明顯,但我不確定範圍是如何在Slim處理的環境中安排的,以解決這個問題。沒有詳細說明幫助者爲什麼(imho)在這個特定情況下沒有多大意義,實例變量解決方案似乎是一個好方法。謝謝! – 2014-09-24 08:04:45