我有一个控制器,它有两种方法:上传和提交
我可以确保在调用submit之前执行upload方法。
在上传中,我有这样的代码:
def upload
@file = params[:avatar]
...
end
在提交中,我有这样的代码:
def submit
...
user.avatar = @file
...
end
但似乎@file是nil。
我哪里错了?....
我正在使用Rails 3.2.0
答案 0 :(得分:0)
控制器中的实例变量不会在请求之间保留。每个请求都会创建一个控制器类的新实例,以便@file
完成后,upload
中保存的upload
消失。然后,当一个新请求进入您的submit
方法时,Rails将创建一个控制器类的新实例并在其上调用submit
。由于您有两个类实例,因此您有两组实例变量,它们不会共享您的@file
。
您必须安排@file
存储在请求之间的数据库,会话,表单等中,然后您的submit
必须从存储的位置加载它并分配它到user.avatar
。