Ruby on rails Rails文件上传
我一直在努力解决这个错误,在rails中上传文件 这是我的代码…我是一个初学者,请帮助,我在下面给出了我的模型、控制器和视图..下面给出的是我的代码Ruby on rails Rails文件上传,ruby-on-rails,ruby,Ruby On Rails,Ruby,我一直在努力解决这个错误,在rails中上传文件 这是我的代码…我是一个初学者,请帮助,我在下面给出了我的模型、控制器和视图..下面给出的是我的代码 class Tutorial < ActiveRecord::Base def self.save(upload) name = upload['upload'].original_filename directory = "public/data" # create the file path pa
class Tutorial < ActiveRecord::Base
def self.save(upload)
name = upload['upload'].original_filename
directory = "public/data"
# create the file path
path = File.join(directory, name)
# write the file
File.open(path, "wb") { |f| f.write(upload['upload'].read) }
end
attr_accessible :category_id, :tutorial_date_release, :tutorial_discription, :tutorial_name, :tutorial_path, :tutorial_teacher_name, :tutorial_type, :upload
belongs_to :category
validates_presence_of :category_id
validates_presence_of :tutorial_date_release
validates_presence_of :tutorial_discription
validates_presence_of :tutorial_name
validates_presence_of :tutorial_path
validates_presence_of :tutorial_teacher_name
validates_presence_of :tutorial_type
validates_presence_of :tutorial_type
#validates_presence_of :upload
#validates_attachment_content_type upload, :content_type => 'application/pdf'
end
阅读有关回形针的信息很好 如果要使代码正常工作,请更改
params
变量。
如你所见
post = Tutorial.save(params[:upload])
应该是
post = Tutorial.save(params[:tutorial])
1) 您的表单应设置为多部分,以便能够处理文件:
form_for(@tutorial,:html=>{:multipart=>true})
2) 由于您的文件上载字段位于表单内,因此需要通过以下方式访问该值:
params[:教程][:上传]
3) 检查堆栈跟踪,并尝试查找调用name
方法的位置,因为您似乎试图对空对象调用该方法
希望这有助于其他答案能给出好的观点;另外,您不应该覆盖Tutorial.save方法,因为save方法是由ActiveRecord定义的,以便实际将模型保存在数据库中;改用before_save或另一个回调试试carrier wave或papertrail gems。他们提供相当先进的功能。我不能,我不能使用任何其他宝石。。
undefined method `name' for nil:NilClass
Rails.root: C:/Users/Pritesh/Desktop/WebTutor-master/WebTutor-master
Application Trace | Framework Trace | Full Trace
app/controllers/tutorials_controller.rb:50:in `block in create'
app/controllers/tutorials_controller.rb:49:in `create'
Request
post = Tutorial.save(params[:upload])
post = Tutorial.save(params[:tutorial])