0

我正在尝试放置带有部分渲染的文件链接,如下所示:

#Main haml file
= render :partial => 'file_upload', :locals => {:f => f, :file_download => 'residence_cert'}
#Inside the partial
%a{:href => @postulant_info[file_download]}

但这只是使用文件名而不是文件的完整路径创建链接。然后意识到这@postulant_info[file_download]只是给我一个带有文件名的字符串,而不是carrierwave对象

-logger.debug @postulant_info.residence_cert #this is returning my carrierwave object -> 'DocumentUploader'
-logger.debug @postulant_info['residence_cert'] #but this one is just returning a String, the DB record with the file name

一种解决方案可以将 url 像本地一样放在渲染中,= render :partial => 'file_upload', :locals => {:f => f, :file_download => 'residence_cert', :url => @postulant_info.residence_cert.url}但我认为当您在部分模板中拥有属性名称时,“应该”是不必要的。
任何想法将不胜感激。提前致谢

4

2 回答 2

0

我非常不确定您的问题到底是什么,以及您要达到的目标,但是如果您想输出文件的链接,那么在您的部分中

%a{:href => @postulant_info.residence_cert.url}

足够。@postulant_info.residence_cert会给你一个上传器的实例(DocumentUploader),该#url方法返回上传文件的完整 url

顺便说一句,你应该避免在你的局部变量中使用实例变量,局部变量应该使用的唯一变量是它已经被给定了。

于 2012-10-09T17:46:51.130 回答
0

最后我可以通过以下方式实现它:

%a{:href => @postulant_info.send(file_download)}
于 2012-10-18T16:52:32.170 回答