Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails视图中的类变量?_Ruby On Rails - Fatal编程技术网

Ruby on rails rails视图中的类变量?

Ruby on rails rails视图中的类变量?,ruby-on-rails,Ruby On Rails,是否可以在视图中引用ruby类变量?不幸的是,类(@@variables)没有复制到视图中。您仍然可以通过以下方式获取这些信息: controller.instance_eval{@@variable} 或 或者其他不那么恶心的东西 对于Rails,100人中有99.9人不应该这样做,或者至少我想不出一个好的理由。更常见的方法是将类变量包装到helper方法中: # in /app/controllers/foo_controller.rb: class FooController <

是否可以在视图中引用ruby类变量?

不幸的是,类(
@@variables
)没有复制到视图中。您仍然可以通过以下方式获取这些信息:

controller.instance_eval{@@variable}

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


对于Rails,100人中有99.9人不应该这样做,或者至少我想不出一个好的理由。

更常见的方法是将类变量包装到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 -%>."
#在/app/controllers/foo_controller.rb中:
类FooController<应用程序控制器
@@bar='baz'
定义我的行动
结束
方法:bar
def棒
@@酒吧
结束
结束
#在/app/views/foo/my_action.html.erb中:
它可能是一个类变量,也可能不是,但bar是“”

Rosen的答案很好,因为它隐藏了变量“bar”的类型,但是如果您有很多这样的变量,那么需要定义一组helper方法就没有吸引力了。我正在控制器中使用以下各项:

@bar = @@bar ||= some_expensive_call

这样,“一些昂贵的调用”只进行一次,结果被复制到每个实例的@bar中(这样视图就可以以@bar的形式访问它)。

这几乎是一个显而易见的解决方案,我不知道为什么我一开始没有选择这个,虽然这不是我计划使用的,但它确实回答了我最初的问题
@bar = @@bar ||= some_expensive_call