ActioncableとActivestrageで画像を表示したい
Actioncable で画像を表示しようとしたところ、文字は表示されるのですが
画像はundifindedと表示されてしまう状況です。
発生している問題・エラーメッセージ
(文字列) undifinded
該当のソースコード
channel.js
import consumer from "./consumer"
consumer.subscriptions.create("ItemChannel", {
connected() {
// Called when the subscription is ready for use on the server
},
disconnected() {
// Called when the subscription has been terminated by the server
},
received(data) {
console.log(data)
const html = `
<div class="d-flex flex-wrap">
<div>${data.content.name}</div>
<div><%= image_tag ${data.content.image} %></div>
<div>${data.content.store}</div>
</div>`;
const messages = document.getElementById('items');
const newMessage = document.getElementById('item_name');
const newImage = document.getElementById('item_image');
const newStore = document.getElementById('item_store')
messages.insertAdjacentHTML('afterbegin', html);
newMessage.value='';
newImage.value='';
newStore.value=''
}
});
<div id='items'>
<div class="place-wrapper ">
<% @items.each do |item|%>
<div class="place-item">
<%= link_to place_item_path(item.id)do%>
<div class="h4 text-dark">
<%= item.name %>
</div>
<%= image_tag item.image.variant(resize:'250x250')%>
<% end %>
</div>
<% end %>
</div>
</div>
controller.rb
def create
@place = Place.find(params[:place_id])
@item = Item.new(item_params)
ActionCable.server.broadcast 'item_channel', content: @item if @item.save
end
private
def item_params
params.permit(:name, :image, :place_id, :store).merge(user_id: current_user.id, place_id: params[:place_id])
end
試したこと
channel.js で
<%= image_tag ${data.content.image} %>の部分を
<img src="${data.content.image}"%>
としましたが変化なしでした。
画面をリロードすることによって画像を表示することはできます。
よろしくお願いいたします。
おそらくですが、画像のURLを取り出すことができたら解決しますので
取り出し方をご教授いただけないでしょうか?
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正の依頼
kuma_kuma_
2020/10/05 17:53 編集
<div><%= image_tag ${data.content.image} %></div>
ここを一度下記の様にしてURLを確認
<div>${data.content.image}</div>
で大丈夫なら下の書き方を試して
<div><img src="${data.content.image}" ></div>
n0918k3
2020/10/05 18:05
ご教授ありがとうございます。
アドバイスいただいた内容で解決できませんでした。
コンソールの画像を添付致しますので、お手数おかけして大変申し訳ないのですが
ご教授いただけますでしょうか?
よろしくお願いいたします。
kuma_kuma_
2020/10/05 18:09 編集
いやコンソールじゃなくって、実行した結果の方を確認してください。
<div>${data.content.image}</div>
と書き直した時点で「data.content.image」に思っているURLが指定されているかの確認だから...
追記
data.contentにimageってないよね?
追記2
data.content.nameはどうやって設定していますか?
それと同じときに同じようにdata.content.imageに画像URLの指定をされてはいかがですか?
n0918k3
2020/10/05 18:31 編集
<div>${data.content.image}</div>の結果はundifindedとなっておりました。
<div><img src="${data.content.image}" ></div>では画像のリンク切れが起きている状況です。
data.contentにimageがないというのはcontentにimageカラムがないという認識でよろしいでしょうか?
contentとはhas_one_attached :imageで画像を添付している状態です。
n0918k3
2020/10/05 18:41 編集
data.content.nameは
簡潔に申し上げますと data.content.name = @item.name
controller.rb にて ActionCable.server.broadcast 'item_channel', content: @item if @item.save
の記述でcontent = @itemとして
date.contentに.nameを足すことでnameを取り出しております。
画像のURLの取り出し方が分からないので教えていただけますでしょうか?
kuma_kuma_
2020/10/05 18:51
>data.contentにimageがないというのはcontentにimageカラムがないという認識でよろしいでしょうか?
そうですね。
> contentとはhas_one_attached :imageで画像を添付している状態です。
そのような記載がここに提示されているソースにはありませんでした。
一応別に書かれている可能性も考えURLの表示をお願いした次第です。
https://qiita.com/hmmrjn/items/7cc5e5348755c517458a
https://railsguides.jp/active_storage_overview.html
has_one_attachedに関しては上記URLが参考になりかと思います。
スペルミス等確認され先の状態で正しくURLが取得できるか確認してください。
n0918k3
2020/10/05 19:09
ありがとうございます。参考にさせていただきます。