2014-05-11 69 views
0

我正在Sinatra網站上允許用戶上傳文件。我得到這個行動路線: Mongo對象的id作爲在Sinatra/Mongoid中的文件上傳的dirname

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中的文檔具有兩個字段created_at,從POST請求取文件,並在公共/上傳/ ID寫入/ FILE.jpg。但是,Pow返回給我未定義的方法`ID'爲UsrUpld:類。如何用Mongoid在路由中詢問對象的ID?

預先感謝您。

+0

當我試圖上傳文件沒有* UsrUpld.id *它工作正常,並保存/上傳所有文件。此外,我嘗試創建* u *變量與新的* UsrUpld *裏面,這返回相同**未定義的方法'ID'**。 – askhat

+0

哦,我明白了:我要求* id * * UsrUpld.new(#code).save *,而不是* UsrUpld.new *,現在我在做* u = UsrUpld.new *然後* u。保存*,完全如您所指。 – askhat

+0

如果您已經找到問題的答案,請隨時將其發佈爲下面的答案。您可以在第二天左右將其標記爲已接受。 – BoltClock

回答

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打開文件之前應該存在,這就是爲什麼迪爾。添加了mkdir行。

相關問題