あなたのソリューションが動作します使用していますが、名前はFile.basename
で有効であることを確認する必要がありますので、誰かが../../secret_credentials.yml
を渡すことができませんでしたし、場合use_libraryがtrueを返す場合だけ頼みますあなたが望んでいない情報を公開する。また、あらかじめ設定された画像のリストと照らし合わせてチェックするのも良い考えです。
ただし、この場合CarrierWaveをスキップすることで、これをより効率的に行うことができます。
library_image
という名前の新しいフィールドを追加し、誰かがプリセット画像を使用したい場合はlibrary_image
を設定し、自分の写真を使用する場合はlibrary_image
の設定を解除して写真をアップロードします。その後のようなヘルパーメソッドを追加します。CarrierWaveにこれはあなたがhttp://example.com/images/[name]
でプリセットの画像を見つけることができると仮定し、あなたがmount_uploader
を使用している
def avatar_url
if self.library_image?
"http://example.com/images/#{self.library_image}"
else
self.picture.url
end
end
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
どのように私は、ユーザーが新しい写真をアップロードしていることを検出することができますか?つまり、library_imageをリセットするために書く必要があるコールバック関数の名前は何ですか?ありがとうございました! – CamelCamelCamel
@CamelCamelCamel私は元の答えを例で更新しました。 –
avatar_urlに応じてファイルをプリセットまたはファイルとして返すにはどうすればよいですか? – CamelCamelCamel