Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails文件上传_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on 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

我一直在努力解决这个错误,在rails中上传文件 这是我的代码…我是一个初学者,请帮助,我在下面给出了我的模型、控制器和视图..下面给出的是我的代码

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])