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

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

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

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

Ruby

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

Q&A

解決済

2回答

1666閲覧

<%= form.file_field :image %>で画像のファイル名としてではなく画像として出力をしたい

YK282

総合スコア21

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2019/07/22 06:55

編集2019/07/22 08:23

前提・実現したいこと

scaffoldを使わずにCRUD機能をもつものを作成しています。
そこで<%= form.file_field :image %>で画像のアップロードをしようとしています。
ファイル名では反映されるのですが、画像として反映されず詰まっております。
分かる方がいらっしゃいましたらご教授いただければ幸いです。

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

イメージ説明
上記のイメージ画像内の「写真」の箇所には#ActionDispatch::Http::UploadedFile:………とファイル名なってしまいます。この部分をファイル名ではなく、上記のイメージ画像のように画像として「写真」の箇所に反映させたいです。

該当のソースコード

new.html.erb, edit.html.erb

<div class="field"> <%= f.label :image, t('.image') %> <%= f.file_field :image %> </div>

index.html.erb

<tbody> <% @lists.each do |list| %> <tr> <td><%= list.name %></td> <td><%= list.taste %></td> <td><%= list.price %></td> <td><%= list.service %></td> <td><%= list.memo %></td> <td><%= list.image.to_s %></td> <td><%= list.total %></td> <td><%= link_to t('.show'), list, class: 'btn btn-info' %></td> <td><%= link_to t('.edit'), edit_list_path(list), class: "btn-flat-border rounded-pill" %></td> <td><%= link_to t('.delete'), list_path(list), method: :delete, data: { confirm: '本当に削除しますか?' }, class: "btn-flat-border rounded-pill" %></td> </tr> <% end %> </tbody>

show.html.erb

<p> <strong><%= t('.image') %> :</strong> <%= @list.image.to_s %> </p>

lists.controller.rb

class ListsController < ApplicationController before_action :authenticate_user! def index @lists = List.all end def show @list = List.find(params[:id]) end def new @list = List.new end def create @list = List.create(list_params) @list.save redirect_to lists_path end def edit @list = List.find(params[:id]) end def update @list = List.find(params[:id]) @list.update(list_params) redirect_to lists_path end def destroy @list = List.find(params[:id]) @list.destroy redirect_to lists_path end private def list_params params.require(:list).permit(:name, :taste, :price, :service, :memo, :image, :total) end end

補足情報(FW/ツールのバージョンなど)

rails 5.2.3

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

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

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

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

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

Mugheart

2019/07/22 07:05 編集

質問がうまく読み取れません。 結局何で困っているんでしょうか。 「画像として反映されず」とはどういう状態のことを指しているのでしょう。 当事者でなくてもわかるような具体的な質問をお願いします。
guest

回答2

0

ベストアンサー

それはファイル名ではありません。uploadされたfuleを読むために作られた「openされたFileIOの様なもの」です。それをsaveしても画像は取り込まれません。
とり込むには CarrierWave のようなgemを使うか、自分で「読んで書き出す」処理を書くか、が必要です。

どう読み出すか、はどうとり込むかで変わります。

投稿2019/07/22 08:01

winterboum

総合スコア23329

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

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

winterboum

2019/07/22 08:49

あれ、これでOKですか? 取り込んだあとの表示の話に続くかとおもったのですが
YK282

2019/07/22 14:00

carrierwaveとRmagickを入れ、調べながらやったところきちんと表示されたのでOKでした!
winterboum

2019/07/22 14:07

なかなかやるじゃないですか。
guest

0

Viewファイルしか提示されてないのでその範囲内での回答になりますが

erb

1<td><%= image_tag image_path %></td>

で画像の表示ができます。
そのためには画像ファイルを保存してある必要がありますが。

投稿2019/07/22 07:54

Mugheart

総合スコア2344

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

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

YK282

2019/07/22 08:01

ご回答いただきありがとうございます。 可能であれば画像ファイルを保存していない状態(誰が投稿しても表示される状態)で表示できるようにしたいです。 他にこちらが提示すべきものがあれば教えてください。
Mugheart

2019/07/22 08:16

すみません、「画像ファイルを保存していない状態」と「誰が投稿しても表示される状態」が結びつかないです。 保存はあくまで保存するだけなので「誰が投稿しても表示される状態」にはできると思います。 コントローラのファイルがあると処理がわかるので回答しやすいです。
YK282

2019/07/22 08:47

分かりずらい質問をしてしまい申し訳ないです。 carrierwaveを使ったところ無事表示できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問