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

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

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

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

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Q&A

解決済

1回答

2417閲覧

rails5でのcarrierwaveを用いた画像投稿機能の実装でのエラー

ShunUsami

総合スコア6

Ruby on Rails 5

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

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

0グッド

0クリップ

投稿2018/04/12 08:21

編集2018/04/13 05:28

プログラミング初心者です。現在progateなどを参考にしながらツイッターのようなSNSを実装しています。
herokuでの公開に向けてユーザのプロフィール画像の投稿をcarrierwaveを使って行いたいです。
現在、アップデートアクションでユーザの画像を保存するとエラーは出ないもののユーザテーブルのイメージカラムが空っぽのままであり、画像の表示ができません。
名前は編集するときちんと上書きされます。
エディットビューでアップロードした画像ファイルのみがユーザコントローラのアップロードアクションにうまく受け渡せていないのでしょうか?
その場合どのように解決すれば良いでしょうか?
初心者のため、どなたかお力を貸していただけると幸いです。
よろしくお願いします。

ruby

1#ユーザコントローラ 2class UsersController < ApplicationController 3 def ranking 4 @users = User.all 5 end 6 7 def show 8 @user = User.find_by(id: params[:id]) 9 end 10 11 def new 12 @user = User.new 13 end 14 15 def create 16 @user = User.new( 17 name: params[:name], 18 image: "default_user.jpg" 19 ) 20 if @user.save 21 flash[:notice] = "ユーザー登録が完了しました" 22 redirect_to("/users/#{@user.id}") 23 else 24 render("users/new") 25 end 26 end 27 28 def edit 29 @user = User.find_by(id: params[:id]) 30 end 31 32 def update 33 @user = User.find_by(id: params[:id]) 34 @user.name = params[:name] 35 @user.image = params[:image] 36 37 if @user.save 38 flash[:notice] = "ユーザー情報を編集しました" 39 redirect_to("/users/#{@user.id}") 40 else 41 render("users/edit") 42 end 43 end 44 45end 46 47

ruby

1#エディットビュー 2 3<%= form_with(model: @user, local: true) do |form| %> 4 5<div class="main users-edit"> 6<div class="container"> 7<div class="form-heading">アカウント編集</div> 8<div class="form users-form"> 9<div class="form-body"> 10<% @user.errors.full_messages.each do |message| %> 11<div class="form-error"> 12<%= message %> 13</div> 14<% end %> 15 16 17<p>ユーザー名</p> 18<input name="name" value="<%= @user.name %>"> 19<p>画像</p> 20<%= form.file_field :image, id: :user_image %> 21<%= form.hidden_field :image_cache %> 22 23<input type="submit" value="保存"> 24<% end %> 25 26</div> 27</div> 28</div> 29</div> 30

ruby

1#ユーザモデル 2 3class User < ApplicationRecord 4 validates :name, {presence:true, uniqueness:true} 5 mount_uploader :image, ImageUploader 6end 7

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

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

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

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

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

guest

回答1

0

自己解決

解決できました。
form_withで引き渡す配列が二次元だということをわかっていませんでした…

ruby

1<%= form_with(model: @user, local:true) do |form| %> 2 3<div class="main users-edit"> 4<div class="container"> 5<div class="form-heading">アカウント編集</div> 6<div class="form users-form"> 7<div class="form-body"> 8 9<% @user.errors.full_messages.each do |message| %> 10<div class="form-error"> 11<%= message %> 12</div> 13<% end %> 14 15<%= form.label :name %> 16<%= form.text_field :name, id: :user_name %> 17 18<%= form.label :image %> 19<%= form.file_field :image, id: :user_image %> 20<%= form.hidden_field :image_cache %> 21 22<%= form.submit "Update"%> 23 24</div> 25</div> 26</div> 27</div> 28 29<% end %> 30

ruby

1class UsersController < ApplicationController 2 3 def ranking 4 @users = User.all 5 end 6 7 def show 8 @user = User.find_by(id: params[:id]) 9 end 10 11 def new 12 @user = User.new 13 end 14 15 def create 16 @user = User.new( 17 name: params[:name], 18 image: "default_user.jpg" 19 ) 20 if @user.save 21 flash[:notice] = "ユーザ登録が完了しました" 22 redirect_to("/users/#{@user.id}") 23 else 24 render("users/new") 25 end 26 end 27 28 def edit 29 @user = User.find_by(id: params[:id]) 30 end 31 32 def update 33 @user = User.find_by(id: params[:id]) 34 @user.name = params[:user][:name] 35 36 if params[:user][:image] 37 @user.image = params[:user][:image] 38 end 39 40 if @user.save 41 flash[:notice] = "ユーザ情報を編集しました" 42 redirect_to("/users/#{@user.id}") 43 else 44 render("users/edit") 45 end 46 end 47 48end 49 50

投稿2018/04/15 09:23

ShunUsami

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問