渲染部分Ruby Slim模板,我在引擎块中嵌入了一个小帮助方法。细分示例:
ruby:
def new_record_form?
object.new_record?
end
此处,object
是本地分配的变量,可以在常规Slim代码中使用,但在引擎块的上下文中不可访问。此外,local_assigns
也不可用。
如何在这样的块中访问传递给partial的变量?
答案 0 :(得分: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
。
Ruby也允许使用这样的语法,这与编译Slim代码时的情况更接近:
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
请注意,一般建议是将模板中的实际代码保持在最低限度。您可能希望将此方法移动到帮助程序中 - 实例变量可以从那里获得。