后续调用后实例变量重置

时间:2015-05-09 06:47:34

标签: ruby-on-rails ruby-on-rails-3

我是ROR的新手。

我有一个控制器

class Controllername < application
  def method1
    @obj = API_CALL
    redirect_to redirect_url    #calls the API authorization end point 
                                #and redirects to action method2 
  end

  def method2    #redirection to this action
     @obj.somemethod  #this value is null
  end
end

我的问题是当我使用Instance变量或类变量@obj或@@ obj在action method2中变为nil时。我希望这个值与method1中的值无关。

注意:SESSION注释帮助,因为它给出了SSL错误。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

使用实例变量的原因不起作用,因为该类的实例仅存在于method1method2方法中。

你可以做的是使用类变量。您可以使用class_variable_set(:@@class_variable_name, value)设置它们,然后再次使用class_variable_get(::@@class_variable_name)。在你的情况下它看起来像这样:

class Controllername < application
  def method1
    class_variable_set(:@@api_call_data, API_CALL)
    redirect_to redirect_url    #calls the API authorization end point 
                                #and redirects to action method2 
  end

  def method2    #redirection to this action
     class_variable_get(:@@api_call_data).somemethod  #this value is null
  end
end

原因只有当数据对于每个用户都相同时才有效,如果数据是用户特定的,则需要使用特定于用户的类变量名称。