2016-08-04 86 views
1

我有一個請求模型和文檔模型之間的關聯設置。每個請求has_many文檔和每個文檔belongs_to一個請求。上傳文件並將它們存儲到文件夾中效果很好。目前,我的store_dir方法是這樣的:CarrierWave文件上傳store_dir父協會

def store_dir 
    "uploads/Requests/#{model.id}" 
end 

不過,我不知道我怎麼會被request.id保存文件,然後model.id:

def store_dir 
    "uploads/#{request.id}/#{model.id}" 
end 

這可能嗎?希望有人能指引我正確的方向。我不確定如何將請求ID傳遞到DocumentUploader。

如果需要提供更多信息,請告訴我!

回答

2

由於model是掛載上傳器的ActiveRecord實例,因此您應該可以使用ActiveRecord關聯。由於您聲明Documentbelongs_to a Request(並且我假設Document是安裝上傳器的ActiveRecord),因此您可以使用model.request_id(或model.request.id)獲得Request的ID。

def store_dir 
    "uploads/#{model.request_id}/#{model.id}" 
end 
+1

哇。非常感謝! – nkulig

+0

這可以起作用,但是如果在父模型之間使用相同的「Carrierwave Uploader」(它們之間共享),則必須使用不同的方法。我的意思是,如果'Requests'和'Invoices'都使用'Documents',那麼代碼必須從'request_id'或'invoice_id'中提取父'id'。任何想法都非常受歡迎。 –

+1

@ W.M。在這種情況下,每個模型上的def parent_id或類似方法應返回所需的ID。例如:'def parent_id request_id end'。然後,您可以將'store_dir'更改爲''uploads /#{model.parent_id} /#{model.id}「'。 – koffeinfrei