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

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

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

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Ruby

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

アップロード

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

Ruby on Rails

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

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Q&A

解決済

1回答

2073閲覧

【Rails】ActiveStorageを用いて出力された画像のURLを使って画像リンクを作成したい

Kanade_JoinT

総合スコア4

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Ruby

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

アップロード

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

Ruby on Rails

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

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

0グッド

0クリップ

投稿2020/10/21 03:15

編集2020/10/21 04:54

目的概要

いつもお世話になっております。

実現したいこととして、アップロード(出力・表示)された画像(のリンク)をクリックすることで、元のサイズ画像が表示されるようにしたいです。

こちらこちらの記事を参考に、アップロード後の画像のidやURLなどの情報を配列およびハッシュで取得、そして「link_to」と「image_tag」を使って画像リンクの雛形を作り、あとはパス(URL)だけ記述すれば完了というところまではできたのですが、取得したURLをそれぞれ画像に埋め込ませようというところで悪戦苦闘している状況です。

汚いコードで申し訳ございませんが、以下に該当ソースコードを添付いたします。

該当のソースコード

↓model

ruby

1class Message < ApplicationRecord 2 belongs_to :user 3 has_one_attached :image 4 5 validates :content, presence: true, unless: :was_attached? 6 7 def was_attached? 8 self.image.attached? 9 end 10end

↓controller

ruby

1class MessagesController < ApplicationController 2 def index 3 @message = Message.new 4 @messages = Message.all.order(created_at: "DESC") 5 @image_urls = Message.all.with_attached_image 6 @image_urls = @image_urls.map { |image_url| image_url.as_json.merge({ image_url: url_for(image_url.image) })} 7 binding.pry 8 # @image_urls = @image_urls.map {|image_url| image_url[:image_url]} 9 end 10 11 def create 12 Message.create(message_params) 13 redirect_to messages_path 14 end 15 16 private 17 def message_params 18 params.require(:message).permit(:message, :image).merge(user_id: current_user.id) 19 end 20end

↓view

ruby

1 <div class="shared-area-wrapper"> 2 <div class="shared-area"> 3 <% @messages.each do |message| %> 4 <div class="message-text-area"> 5 <div class="message-text-image"> 6 <div class="message-text"> 7 <%= message.message %> 8 </div> 9-------------------------画像出力コードはここから------------------------------------------------ 10 <div class="message-image-right"> 11 <%= link_to "#" do %> ⇦「#」の部分に画像のパス(またはリンク)を入れる 12 <%= image_tag message.image, class: 'message-image' if message.image.attached? %> 13 <% end %> 14 </div> 15-------------------------画像出力コードはここまで------------------------------------------------ 16 </div> 17 </div> 18 <div class="bottom-area"> 19 <div class="border-area-left"> 20 <p class="user-name"> 21 <%= "#{message.user.nickname}さんの投稿" %> 22 </p> 23 </div> 24 <div class="border-area-right"> 25 <p class="ceated-at"> 26 <%= l message.created_at %> 27 </p> 28 </div> 29 </div> 30 <% end %> 31 </div> 32 </div> 33

試したこと

viewの「#」の部分には以下のコードそれぞれ入れて挙動確認するも、うまく表示されず...。

ruby

1@image_urls.find(id: message.id) 2 3@image_urls.find(id: message.id).fetch(:image_url) 4 5@image_urls.find(id: message.id).image_url 6 7@image_urls.find(id: message.id)[:image_url] 8 9@image_urls.first(id: message.id)

ターミナルで確認すると、以下のように「#<Enumerator: ...>」と表示されたので、検索してこちらの記事を参考にさせていただいたのですが、何も分からず...。

terminal

1[2] pry(#<MessagesController>)> @image_urls.find(id: 3) 2=> #<Enumerator: ...>

解決策の分かる方がいらっしゃいましたら、どうかご教授いただけますと幸いです。
よろしくお願いいたします。

※もし他に必要なファイルや情報がございましたら、お申し付けください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

url_for(imageのURL)とするのが正しかったと思います。
なので以下のようだといかがでしょうか(if文とかは自身で書いていただきながら)。

<%= link_to url_for(message.image) do %> <%= image_tag message.image, class: 'message-image' if message.image.attached? %> <% end %>

投稿2020/10/21 06:41

hatsu

総合スコア1809

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

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

Kanade_JoinT

2020/10/21 07:54

>> hatsu様 お忙しい中、ご回答いただきまして誠にありがとうございます。 hatsu様からご教授いただきましたコードを記述したところ、無事に画像が表示されました。 今回ご教授いただけたコードの理解力を深め、今後に活かしたいと思います。 大変感謝いたします、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問