目的概要
いつもお世話になっております。
実現したいこととして、アップロード(出力・表示)された画像(のリンク)をクリックすることで、元のサイズ画像が表示されるようにしたいです。
こちらやこちらの記事を参考に、アップロード後の画像の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: ...>
解決策の分かる方がいらっしゃいましたら、どうかご教授いただけますと幸いです。
よろしくお願いいたします。
※もし他に必要なファイルや情報がございましたら、お申し付けください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/21 07:54