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

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

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

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Q&A

解決済

2回答

2385閲覧

画像が保存出来ない(ActiveStorage導入)テーブルのimageでNULLになる

yutaro_0529

総合スコア12

Ruby on Rails

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

0グッド

0クリップ

投稿2020/10/30 16:20

前提・実現したいこと

ActiveStorageを使って画像をテーブルに保存し、
ブラウザで画像を表示させたいのですが、
パソコン上のデータにアクセス出来、ActiveStorageテーブルにデータが保存されるが、
itemテーブルのimageには保存出来なくて困っています。
教えていただけると助かります。

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

app/views/items/_item.html.erb:1でエラーが発生している。

解読出来なかった内容

・ターミナルの最後のメッセージ
ActiveStorage::Attachment Load (0.4ms) SELECT active_storage_attachments.* FROM active_storage_attachments WHERE active_storage_attachments.record_id = 8 AND active_storage_attachments.record_type = 'Item' AND active_storage_attachments.name = 'image' LIMIT 1
↳ app/views/items/_item.html.erb:1
Rendered items/_item.html.erb (Duration: 3.4ms | Allocations: 1361)
Rendered items/index.html.erb within layouts/application (Duration: 54.2ms | Allocations: 17299)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 72ms (Views: 53.7ms | ActiveRecord: 12.8ms | Allocations: 25897)

エラーメッセージ

該当のソースコード

Ruby on rails app/views/items/_item.html.erb <div class="content_post" style="background-image: url(<%= image_tag item.image ,class: 'item-image' if item.image.attached? %>);"> <%# 参考にしたコード<%= image_tag message.image, class: 'message-image' if message.image.attached? %> %> <%# attached?メソッド レコードにファイルが添付されているかどうか モデル.ファイル名.attached? %> <%# image_tagメソッド img要素を生成するRailsのヘルパーメソッド %> <%# image_tagメソッドでは、複雑なRailsのディレクトリパスを指定しなくても、モデルから画像ファイルを呼び出して引数に記述するだけで、画像を表示するimg要素を生成 %>

試したこと

<div class="content_post" style="background-image: url(<%= item.image %>);"> 上記から↓に変更 <div class="content_post" style="background-image: url(<%= image_tag item.image ,class: 'item-image' if item.image.attached? %>);">

app/models/item.rbに
下記を実装
class Item < ApplicationRecord
validates :text, presence: true
belongs_to :user
has_one_attached :image(ここでimageに保存できると思いました。)
#画像ファイルをitemテーブルのレコードに添付
#itemテーブルにカラムを追加する必要なし

違うと思いながら、items/show.html.erbに
imageが保存できるように_item.html.erbと同じものを実装

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

Gemに導入

gem 'mini_magick'
gem 'image_processing', '~> 1.2'

mini_magickとはImageMagickの機能をRubyで扱えるようにしてくれる
ImageProcessing、MiniMagickでは提供できない、画像サイズを調整する機能を提供する
画像加工のために必要なImageMagick

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

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

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

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

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

guest

回答2

0

ここで背景画像にアクティブストレージで保存された画像を表示したいのだと思います。

<div class="content_post" style="background-image: url(<%= item.image %>);">

<%= item.image %>の部分は画像のURLを取得できればいいと思いますので <%= url_for(item.image) %>#{url_for(item.image)}にするといかがでしょうか

投稿2020/10/31 02:28

hatsu

総合スコア1809

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

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

yutaro_0529

2020/11/02 01:14

ご回答頂きありがとうございます!! 両方使ってみたのですが、 2つともエラーになってしまいました。 url_forメソッドについて詳しく調べてみるとassetにurlとして保存したデータを受けれるようにしないと、 画像の表示が出来ないということに気がつけ解決することが出来ました。 本当にありがとうございます!!
guest

0

自己解決

Ruby on rails app/views/item/_item.html.erb <div class="content_post" style="background-image: url(<%= Rails.application.routes.url_helpers.url_for(item.image) if item.image.attached? %>);"> バックグランドに表示させるためには、item_tabでは画像を表示させることが出来ず、 まずは、下記のファイルを編集しました。 config/enviloment/development.rb 下記を一番したの行に追加 config.action_mailer.default_url_options = { host: 'localhost' } こうすることでローカル環境で画像をurlとして取得出来、 ビューのurl_forメソッドで画像の表示が可能となりました。 [参考リンク](https://shinkufencer.hateblo.jp/entry/2018/07/25/230537)       (https://qiita.com/shou8/items/3c41cb6a06ff1e0cdb95)

投稿2020/11/02 01:26

編集2020/11/02 01:37
yutaro_0529

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問