質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

1228閲覧

【Ruby on Rails】carrierwaveでファイルアップロード時、次の画面までそのファイルを保持する方法

maruineko

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/05/30 09:12

railsで画像アップロード()機能を作っているのですが、
バリデーションにひっかかった際に、次の画面までアップロードした画像ファイルを保持したいです。
carrierwaveを使用してとAWS S3へ保存しています。
調べたところ、view側にhidden_fieldで「**_cache」というので維持できるそうですが、うまくいかないです。
どうすれば次の画面までファイルを保持できるでしょうか?

・app/controllers/user_controller.rb(一部省略)

ruby

1class UsersController < ApplicationController 2 def edit 3 @user = current_user 4 end 5 6 def update 7 @user = current_user 8 if @user.update(user_params) 9 redirect_to settings_path, notice: "設定を保存しました。" 10 else 11 render :edit 12 end 13 end 14 15 private 16 17 def user_params 18 params.require(:user).permit(:name, :image, :image_cache) 19 end 20end

・app/views/users/edit.html.erb(一部省略)

ruby

1<%= form_with model: @user, url: edit_path, local: true, method: :patch do |f| %> 2 <%= f.file_field :image, class: "form-control-file", accept: "image/jpeg, image/png, image/gif" %> 3 <%= f.hidden_field :image_cache %> 4<% end %>

・models/user.rb

ruby

1class User < ApplicationRecord 2 mount_uploader :image, ImageUploader 3end

・app/uploaders/image_uploader.rb

ruby

1class ImageUploader < CarrierWave::Uploader::Base 2 include CarrierWave::MiniMagick 3 4 storage :fog 5 6 def store_dir 7 "uploads/users/image" 8 end 9 10 def extension_whitelist 11 %w(jpg jpeg gif png) 12 end 13 14 def filename 15 "#{model.id}.jpg" 16 end 17 18 def auto 19 manipulate! do |image| 20 image = image.auto_orient 21 image = yield(image) if block_given? 22 image 23 end 24 end 25 26 process :auto 27 process :convert => "jpg" 28end

・config/initializers/carrierwave.rb

ruby

1require 'carrierwave/storage/abstract' 2require 'carrierwave/storage/file' 3require 'carrierwave/storage/fog' 4 5CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:].\-+]/ 6 7CarrierWave.configure do |config| 8 config.fog_provider = "fog/aws" 9 config.fog_credentials = { 10 provider: 'AWS', 11 aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"], 12 aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"], 13 region: 'ap-northeast-1' 14 } 15 config.cache_storage = :fog 16 config.fog_public = true 17 config.fog_directory = 'example' 18 config.asset_host = 'https://example.s3-ap-northeast-1.amazonaws.com' 19 config.fog_attributes = { cache_control: "public, max-age=#{100.days.to_i}" } 20end

以上を見て変なところや何か思いつくことがあれば教えてください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問