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]、搬送波オブジェクトではなく、ファイル名を含む文字列を提供しているだけであることに気付きました

-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

1 つの解決策は、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.send(file_download)}
于 2012-10-18T16:52:32.170 に答える
0

あなたの問題が正確に何であり、何を達成しようとしているのかについては非常に不確かですが、ファイルへのリンクを出力したい場合は、部分的に

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

で十分です。@postulant_info.residence_certアップローダ ( DocumentUploader) のインスタンスを提供し、#urlメソッドはアップロードされたファイルの完全な URL を返します。

ところで、パーシャルでインスタンス var を使用することは避けてください。パーシャルで使用する必要がある変数は、与えられた変数だけです。

于 2012-10-09T17:46:51.130 に答える