show method rails中的实例变量为null

时间:2015-01-15 18:18:14

标签: ruby-on-rails rest instance

我开发了一个rest api,我正在使用实例变量。我有两种方法index和show,我在index方法中创建了一个实例变量,我想在show方法中用于用户请求。

但是我不知道,show方法中的实例变量是null,我确信我没有明确地在任何地方初始化类。代码段位于

之下
def index
  data = Hash.new

  @temp = DataHelper.filter(params)
  if(params[:type] == 'Student')
    json = DataStudenteHelper.sfilter(params, @temp)
  else
    json = EmpDataHelper.empfilter(params, @temp)
  end
  puts data.to_json
  render :status => :ok, :json => json
end                                                                                          


def show      
  puts @temp.to_json    // null here                                                                                          
  if (params[:type] == 'Student')
    @h = StudentHelpHelper.shfilter(params, @temp)
  else
    @h = EmpDataHelpHelper.emphfilter(params, @temp)
  end
  render :status => :ok, :json => @h
end

在方法sfilter,empfilter,shfilter和emphfilter中,我只是在处理@temp但在show方法中它是null ... 所以,任何想法是什么问题,谢谢...

1 个答案:

答案 0 :(得分:0)

您似乎假设控制器将在多个请求中保持不变,以便您可以在index操作中初始化变量,并且仍然可以在后续show操作中使用它。不是这种情况。 Rails控制器实例仅在它们所服务的请求期间存在。您不能在请求中将值保存在内存中(也不应该这样,因为这需要按特定顺序提供请求,并且会在不同用户之间泄漏数据)。

如果需要在所有控制器操作考虑使用before过滤器之前初始化此变量。在您的情况下,这可能意味着您还需要在show动作的参数中提供所需的数据。