使用するソリューションはFile.open
機能しますが、名前が有効であることを確認して、File.basename
誰かが渡し../../secret_credentials.yml
て欲しくない情報を公開できないようにする必要があります。また、プリセット画像のリストと照らし合わせて確認することをお勧めします。
ただし、この場合、CarrierWave をスキップすることで、より効率的にこれを行うことができます。
と呼ばれる新しいフィールドを追加しlibrary_image
ます。誰かがプリセット画像をlibrary_image
使用したい場合は を設定し、自分の写真を使用したい場合は、設定を解除library_image
して通常どおり写真をアップロードします。次に、次のようなヘルパー メソッドを追加します。
def avatar_url
if self.library_image?
"http://example.com/images/#{self.library_image}"
else
self.picture.url
end
end
これは、プリセット画像が で見つかり、CarrierWave でhttp://example.com/images/[name]
使用していることを前提としています。mount_uploader
picture
写真を表示したいときはいつでも呼び出しavatar_url
て、事前設定された URL を返すか、アップロードした写真を返すかを確認します。
元の質問に基づいて更新library_image
する方法の例:picture
if params[:file].is_a?(Hash)
model.library_image = params[:file][:url]
model.remove_picture = true
else
model.library_image = nil
model.picture = params[:file]
end