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

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

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

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

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

0回答

631閲覧

Carrierwaveで画像のアップロードができない

laOLOVAesVERDE

総合スコア4

Ruby

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

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2020/03/26 17:09

発生している問題・エラーメッセージ

開発環境・本番環境において、
ユーザー登録及び更新の際に、入力フォームで画像ファイルを指定せずにユーザー作成をすると、
デフォルト画像が登録され、ユーザーの詳細画面にリダイレクトされます。
(※コンソールで確認すると、DB上ではimage属性はnil)

しかし、入力フォームで画像ファイルを指定し、ユーザー作成を行うと、
「このサイトにアクセスできません(ERR_ACCESS_DENIED)」と表示されてしまいます。
エラーが発生している時点でのURLはユーザーの詳細画面のURLとなっています。
(開発環境での例: http://localhost:3000/users/12)

原因となっていそうなファイルを見直しましたが、エラーを解消できませんでした。。

上記のエラーを解消し、Carrierwaveでの画像アップロードを可能にしたいです。

該当のソースコード

### routes.rb Rails.application.routes.draw do root 'static_pages#home' get '/help', to: 'static_pages#help' get '/about', to: 'static_pages#about' get '/contact', to: 'static_pages#contact' get '/signup', to: 'users#new' post '/signup', to: 'users#create' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :users resources :facilities, only: [:show, :edit, :new, :create, :update, :destroy] end
### image_uploader.rb class ImageUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick include CarrierWave::MiniMagick process resize_to_limit: [400, 400] # Choose what kind of storage to use for this uploader: if Rails.env.production? storage :fog else storage :file end # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Provide a default URL as a default if there hasn't been a file uploaded: def default_url(*args) # # For Rails 3.1+ asset pipeline compatibility: #ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) "default.jpg" end # Create different versions of your uploaded files: version :thumb do process resize_to_fit: [50, 50] end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: def extension_whitelist %w(jpg jpeg gif png) end end
### user.rb class User < ApplicationRecord before_save { self.email = email.downcase } mount_uploader :image, ImageUploader has_many :facilities, dependent: :destroy VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i validates :name, presence: true, length: {maximum: 50} validates :email, presence: true, length: {maximum: 255}, format: { with: VALID_EMAIL_REGEX }, uniqueness: {case_sensitive: false} has_secure_password validates :password, presence: true, length: {minimum: 6} validate :image_size private def image_size if image.size > 5.megabytes error.add(:image, 'サイズは5MB以下となります') end end end
### users_controller.rb class UsersController < ApplicationController before_action :logged_in_user, only: [:show, :edit, :update, :destroy] before_action :correct_user, only: [:show, :edit, :update, :destroy] def show @user = User.find(params[:id]) @facilities = @user.facilities end def new @user = User.new end def create @user = User.new(user_params) if @user.save log_in @user flash[:success] = @user + "さん、ようこそ" redirect_to @user else render 'new' end end def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) if @user.update_attributes(user_params) flash[:success] = "プロフィールを更新しました" redirect_to @user else render 'edit' end end def destroy @user = User.find(params[:id]) if current_user?(@user) @user.destroy flash[:success] = "ユーザー情報を削除しました。" redirect_to root_url else flash[:danger] = '削除できませんでした‥' redirect_to edit_user_url(@user) end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation, :image) end def correct_user @user = User.find(params[:id]) redirect_to root_url unless current_user?(@user) end end
### show.html.erb <% provide(:title, @user.name) %> <div class="row"> <aside class="col-md-4"> <section class="user_info"> <h1> <%= image_tag @user.image.thumb.url, :class => "thumbnail thumbnail_edit" %> <%= @user.name %> </h1> </section> </aside> </div>
### new.html.erb <% provide(:title, 'Sign up') %> <h1>アカウント作成</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_for(@user, url: signup_path) do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.label :name %> <%= f.text_field :name, class: 'form_control' %> <%= f.label :email %> <%= f.email_field :email, class: 'form_control' %> <%= f.label :image %> <%= f.file_field :image, accept: 'image/jpg,image/jpeg,image/gif,image/png', class: 'form_control' %> <%= f.label :password %> <%= f.password_field :password, class: 'form_control' %> <%= f.label :password_confirmation %> <%= f.password_field :password_confirmation, class: 'form_control' %> <%= f.submit "アカウント作成", class: "btn btn-primary" %> <% end %> <script type="text/javascript"> $('#user_image').bind('change', function() { var size_in_megabytes = this.files[0].size/1024/1024; if (size_in_megabytes > 5) { alert('プロフィール画像は5MB以下のものを指定してください'); } }); </script> </div> </div>
### edit.html.erb <% provide(:title, "Edit user") %> <h1>設定</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_for(@user) do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= image_tag @user.image.thumb.url, :class => "thumbnail thumbnail_edit" %> <%= f.label :name %> <%= f.text_field :name, class: 'form-control' %> <%= f.label :email %> <%= f.email_field :email, class: 'form-control' %> <%= f.label :image %> <%= f.file_field :image, class: 'form_control' %> <%= f.label :password %> <%= f.password_field :password, class: 'form-control' %> <%= f.label :password_confirmation %> <%= f.password_field :password_confirmation, class: 'form-control' %> <%= f.submit "保存する", class: "btn btn-primary" %> <hr> <% if current_user?(@user) %> <%= link_to '削除する', @user, method: :delete, class: "btn btn-danger", data: {confirm: '本当に削除してもよろしいですか?'} %> <% end %> <% end %> </div> </div>
### Gemfile source 'https://rubygems.org' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.1.6' gem 'bootstrap-sass' gem 'carrierwave' gem 'mini_magick' gem 'rails-i18n' gem 'jquery-rails' gem 'will_paginate' gem 'bootstrap-will_paginate' gem 'faker' # Use Puma as the app server gem 'puma', '~> 3.7' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use ActiveModel has_secure_password gem 'bcrypt', '~> 3.1.7' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] # Adds support for Capybara system testing and selenium driver gem 'capybara', '~> 2.13' gem 'webdrivers' gem 'selenium-webdriver' gem 'sqlite3', '1.3.13' gem 'rspec-rails', '~> 3.8' gem 'factory_bot_rails' gem 'spring-commands-rspec' end group :test do gem 'rails-controller-testing', '1.0.2' gem 'guard' gem 'guard-rspec', require: false end group :development do # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end group :production do gem 'fog' gem 'pg', '0.20.0' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

試したこと

・Chromeのキャッシュ削除
・ローカルサーバーの再起動
→全て効果なし

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問