从控制器扫描实例变量

时间:2014-06-11 09:31:38

标签: ruby-on-rails instance-variables

有没有办法从控制器的方法中读取(扫描)所有实例变量?

例如:

我将在控制器中定义一些实例变量,索引或显示或自定义方法。我想从一个地方知道(获取)所有实例变量值。

class TestClass
  def t1
    @v1 = "test"
  end

  def t2
    @v2 = "test1"
  end
end

TestClass.instance_variables
 => [] 

tc = TestClass.new
tc.t1
tc.instance_variable_names
=> ["@v1"]

以上代码适用于具有自定义方法的类,而不是默认方法(索引,显示等)。

Rails.env
=> "development"
u = UsersController.new
 => #<UsersController:0x00000004233990 @_routes=nil, @_action_has_layout=true, @_headers={"Content-Type"=>"text/html"}, @_status=200, @_request=nil, @_response=nil> 
1.9.3p448 :109 > u.index
NoMethodError: undefined method `env' for nil:NilClass

2 个答案:

答案 0 :(得分:1)

调用instance_variables()方法。

instance_variable_names()

# File activesupport/lib/active_support/core_ext/object/instance_variables.rb, line 27
def instance_variable_names
   instance_variables.map { |var| var.to_s }
end

答案 1 :(得分:0)

最简单的方法可能是这样的:

a = TestClass.new
after_init = a.instance_variables
a.t1
after_t1 = after_init -  a.instance_variables