Mongo对象的id为Sinatra / Mongoid中文件上载的dirname

时间:2014-05-11 16:25:12

标签: ruby mongodb post sinatra mongoid

我在Sinatra网站上工作,允许用户上传文件。我有这个行动路线:

post '/upload' do
  params.delete 'submit'
  UsrUpld.new(
    :name       => params[:name]
    :created_at => Time.now
  ).save
  params[:photos].each do |photo|
    File.open('public/uploads/' + UsrUpld.id + '/' + photo[:filename], 'w') do |file|
      file.write(photo[:tempfile].read)
    end
  end
  redirect '/index'
end

我认为这应该在MongoDB中创建文档,其中包含两个字段 name created_at ,来自POST请求的take文件并将其写入 public / uploads / ID /FILE.jpg 。但Pow回复了我未定义的方法`id'对于UsrUpld:Class 。如何用Mongoid询问对象的id?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

要问一个id,对象应该放在应该包含这个对象的变量中,所以代码应该如下所示:

post '/upload' do
  params.delete 'submit'
  u = UsrUpld.new(
    :name       => params[:name],
    :created_at => Time.now
  )
  u.save
  params[:photos].each do |photo|
    unless File.exists?('public/media/' + u.id)
      Dir.mkdir('public/media/' + u.id)
    end
    File.open('public/uploads/' + u.id + '/' + photo[:filename], 'w') do |file|
      file.write(photo[:tempfile].read)
    end
  end
  redirect '/index'
end

在打开文件之前也应该存在dir,这就是添加 Dir.mkdir 行的原因。