ActionDispatch实例是否不能存储在类变量中?

时间:2012-02-01 09:18:26

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

我有一个控制器,它有两种方法:上传和提交

我可以确保在调用submit之前执行upload方法。

在上传中,我有这样的代码:

def upload
    @file = params[:avatar]
    ...
end

在提交中,我有这样的代码:

def submit
    ...
    user.avatar = @file
    ...
end

但似乎@file是nil。

我哪里错了?....

我正在使用Rails 3.2.0

1 个答案:

答案 0 :(得分:0)

控制器中的实例变量不会在请求之间保留。每个请求都会创建一个控制器类的新实例,以便@file完成后,upload中保存的upload消失。然后,当一个新请求进入您的submit方法时,Rails将创建一个控制器类的新实例并在其上调用submit。由于您有两个类实例,因此您有两组实例变量,它们不会共享您的@file

您必须安排@file存储在请求之间的数据库,会话,表单等中,然后您的submit必须从存储的位置加载它并分配它到user.avatar