2016-08-04 50 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