前提・実現したいこと
railsを用いて作成したアプリ上でユーザーが投稿したmp3ファイルを再生したいです。
対象のmp3はActive Storageを用いて保存しています。
発生している問題・エラーメッセージ
Sprockets::Rails::Helper::AssetNotFound in Tweets#index Showing /Users/tatsu/projects/mupician/app/views/tweets/_tweet.html.erb where line #18 raised: The asset "" is not present in the asset pipeline.
該当のソースコード
view
1<div class="content_post" style="background-image: url(<%= tweet.image %>);"> 2 <div class="more"> 3 <span><%= image_tag 'arrow_top.png' %></span> 4 <ul class="more_list"> 5 <li> 6 <%= link_to '詳細', tweet_path(tweet.id), method: :get %> 7 </li> 8 <% if user_signed_in? && current_user.id == tweet.user_id %> 9 <li> 10 <%= link_to '編集', edit_tweet_path(tweet.id), method: :get %> 11 </li> 12 <li> 13 <%= link_to '削除', tweet_path(tweet.id), method: :delete %> 14 </li> 15 <% end %> 16 </ul> 17 </div> 18 <p><%= tweet.musician%> <%= tweet.music%> <%= tweet.text %> <%= tweet.audio.inspect %></p> 19 20 21 <span class="name"> 22 <a href="/users/<%= tweet.user.id %>"> 23 <span>投稿者</span><%= tweet.user.nickname %> 24 </a> 25 </span> 26</div>
tweetmodel
1class Tweet < ApplicationRecord 2 belongs_to :user 3 has_many :comments 4 has_one_attached :audio 5 with_options presence: true do 6 validates :text 7 validates :musician 8 validates :music 9 validates :image 10 validates :audio 11 end 12end
form
1<%= form_with(model: tweet, local: true) do |form| %> 2 <%= form.text_field :image, placeholder: "Image Url" %> 3 <div>曲</div> 4 <%= form.file_field :audio %> 5 <%= form.text_area :musician, placeholder: "musician"%> 6 <%= form.text_area :music, placeholder: "music"%> 7 <%= form.text_area :text, placeholder: "text", rows: "10" %> 8 <%= form.submit "SEND" %> 9 <% end %>
試したこと
sequel proを確認したところmp3の保存はできていました。
audiojs-railsも導入ずみです
補足情報(FW/ツールのバージョンなど)
HTML5 Rails 6.0.3.4を使用しています
「tweet.audio」の型は何でしょう。
テーブル定義(マイグレーションで作ったのならマイグレーションファイル)を提示してください。
ありがとうございます。active storageのテーブルのためマイグレーションファイルはactive storageのものしかありません。型はアップロードしたものはmp3になります
質問は編集できます。
「型」はオブジェクトの観点です。「mp3」という型はないはずです。
Tweetsテーブルのaudioカラムには何が入ってますか?
説明文や概念ではなく具体例をあげてください。
ファイルの実態なのか、パスなのか、拡張子なのか
ファイルなら形式は何なのか、
パスならどういう形なのか
で出力の仕方が全然違ってきます。
すいません、active storageで保存してTweetテーブルに、モデルで記述してあるhas_one_attachedで紐付けているためおそらくファイルの実態だと思われます
エラーが出ているのは <%= audio_tag tweet.audio %> だと思うのですが、額面通り解釈すると、tweet.audio の値を取得できないのが原因です。
indexアクションなので複数のtweetをループで表示していると思うのですが、該当のtweetのaudioに値が入っているか確認できますか?
DBの中身を見るのもいいですが、ActiveStorage の構造理解していないとちゃんと入っているかどうか分かりづらいので、例えば該当の箇所を <%= tweet.audio %> に変えたりしてみるとわかるかな。
エラーの発生している該当行だけでなく、ある程度まとめて(よく分からないならそのファイル全部)ソース貼った方が回答者は理解しやすいです。
すいません、間違えました質問の方編集しておきます
質問は編集できますので。
モデルとフォームは質問記事に書いているコードのみで1つのファイルになります
`tweet.audio.inspect` は私がお願いして書いていただいたものなので、元に戻してくださいね。
はい!、消しておきます!
回答1件
あなたの回答
tips
プレビュー