我开发了一个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 ... 所以,任何想法是什么问题,谢谢...
答案 0 :(得分:0)
您似乎假设控制器将在多个请求中保持不变,以便您可以在index
操作中初始化变量,并且仍然可以在后续show
操作中使用它。不是这种情况。 Rails控制器实例仅在它们所服务的请求期间存在。您不能在请求中将值保存在内存中(也不应该这样,因为这需要按特定顺序提供请求,并且会在不同用户之间泄漏数据)。
如果需要在所有控制器操作考虑使用before过滤器之前初始化此变量。在您的情况下,这可能意味着您还需要在show动作的参数中提供所需的数据。