Rails视图中的类变量?

7

在视图中能否引用 Ruby 类变量?

3个回答

17

更常见的方法是将类变量包装在一个帮助方法中:

# 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 -%>."

这基本上是显而易见的解决方案,不知道为什么我一开始没有选择它。 - Sam

3

很遗憾,类(@@variables)不会被复制到视图中。但是您仍然可以通过以下方式访问它们:

controller.instance_eval{@@variable}

或者

@controller.instance_eval{@@variable}

或者其他不那么恶心的东西。

使用Rails,99.9%的人永远不应该这样做,或者至少我想不出一个好的理由。


虽然这不是我计划使用的,但它确实回答了我的原始问题。 - Sam

1
Rosen的答案很好,因为它隐藏了“bar”变量的类型,但如果你有很多这样的变量,定义一堆辅助方法的需求是不吸引人的。我在我的控制器中使用以下代码:
@bar = @@bar ||= some_expensive_call

这样,“some_expensive_call”仅被执行一次,结果会被复制到每个实例的@bar中(因此视图可以将其作为@bar访问)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接