Ruby on rails 从控制器扫描实例变量

Ruby on rails 从控制器扫描实例变量,ruby-on-rails,instance-variables,Ruby On Rails,Instance Variables,有没有办法从控制器的方法中读取(扫描)所有实例变量 例: 我将在控制器中定义一些实例变量,可以是index或show,也可以是自定义方法。我想从一个地方知道(获取)所有实例变量值 class TestClass def t1 @v1 = "test" end def t2 @v2 = "test1" end end TestClass.instance_variables => [] tc = TestClass.new tc.t1 tc.inst

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

例:

我将在控制器中定义一些实例变量,可以是index或show,也可以是自定义方法。我想从一个地方知道(获取)所有实例变量值

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
=>“发展”
u=UsersController.new
=>#“text/html”}、@_status=200、@_request=nil、@#u response=nil>
1.9.3p448:109>美国指数
NoMethodError:未定义nil:NilClass的方法'env'

调用实例变量()方法


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

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

它起作用了吗?我肯定这不会奏效的。请举例说明您的答案。@Mr.Black我是从api文档中得到的。不是我自己核实的。希望能有帮助。谢谢。它仅适用于具有自定义方法的类,而不是资源方法。我重复了这个问题。谢谢它不适用于实际的控制器。我有一个控制器列表,它将在大多数具有不同值的方法中具有一些唯一的变量。我需要获取特定实例变量的值并传递给公共函数。我假设您在控制器“before_action”中使用了,在执行调用“index”和“show”之前手动调用这些方法……是的,我也这么认为。但是,似乎我不能直接调用方法索引或show。请参阅我更新的问题。从示例中可以清楚地看到,只有一些变量没有“env”方法。显示整个方法代码
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
a = TestClass.new
after_init = a.instance_variables
a.t1
after_t1 = after_init -  a.instance_variables