這是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
注意的是,一般的建議是,在你的模板的實際代碼保持在最低水平。您可能希望將此方法移到幫助器中 - 實例變量將從此處可用。
這個範圍很明顯,但我不確定範圍是如何在Slim處理的環境中安排的,以解決這個問題。沒有詳細說明幫助者爲什麼(imho)在這個特定情況下沒有多大意義,實例變量解決方案似乎是一個好方法。謝謝! – 2014-09-24 08:04:45