ruby 3.1.0, rails 7.0.2.2を使い簡単なゲームアプリを作っています。
今はその中の一つとしてトランプゲームのブラックジャックを作っています。
ゲーム自体は今の段階ではサーバーとやり取りをするほどではないのjavascrpitを用いて実装を考えています。
やりたいこと
js内でランダムの数字を生成し、それに対応するトランプのカードをapp/asssets/imgages内に保存されているplayer_card-(各数字)の名前の写真を取得し、htmlに描写をしたいです
html.etb
1<div class="w-1/2 mx-auto relative" data-controller="blackjack"> 2 <div class="flex justify-around my-10"> 3 <p id="hit">Hit</p> 4 <p id="stand">Stand</p> 5 </div> 6 <div class=""> 7 <div id="player-field" class="flex justify-center mb-2" data-controller="card_holder"> 8 <div class="w-20"><%= image_tag "player_card-#{@userFirstNum}" %></div> 9 <div class="w-20"><%= image_tag "player_card-#{@userSecondNum}" %></div> 10 <div class="w-20 bg-slate-400 card-holder"></div> 11 </div> 12 <div class="mb-2"> 13 <%= image_tag "img_play-field_user-icon.png", width: "75px", class: "mx-auto"%> 14 </div> 15 <h2>YOU</h2> 16 </div> 17</div>
app/javascript/controllers/blackjack_controller
javascript
1import { Controller } from "@hotwired/stimulus" 2 3export default class extends Controller{ 4 connect(){ 5 const hitBtn = document.getElementById('hit') 6 const playerField = document.getElementById('player-field') 7 hitBtn.addEventListener('click', ()=>{ 8 let imgElement = document.createElement('img') 9 let playCard = Math.floor(Math.random()*(14-1)+1) 10 imgElement.setAttribute('src', `/assets/images/player_card-${playCard}.png`) 11 playerField.querySelector('.card-holder').appendChild(imgElement) 12 }) 13 }
ボタンを押した後のchromeでの出力結果です
<div class="w-20 bg-slate-400 card-holder"><img src="/assets/images/player_card-1.png"></div> //consoleでのエラーメッセージです get http://127.0.0.1:3000/assets/images/player_card-1.png 404 (Not Found)
質問
- javascript内からassets/imagesに接続するためにはどの様にpathを書かなければいけないのでしょうか?
- 独学で勉強しており今回の様な場合どこにjavascriptの処理を書くべきなのかわかっておらず、data-controllerを使って動かそうとしています。もし他に良い方法があれば教えていただけると幸いです
追記
ボタンを押した際の動きをターミナルで追ったところ以下のエラーメッセージを発見しました。
ActionController::RoutingError (No route matches [GET] "/assets/images/player_card-1.png"):
もちろん上記のようなroutesは設定していませんし、ページの中だけで完結させたいのでcontrollerを使ってサーバーサイドとやり取りをすることは考えていませんのでそちらの治し方も教えていただきたいです

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/28 09:17
退会済みユーザー
2022/03/01 05:20