モーダルの変数取得に悩んでいます。
解決したいこと
更新したスキル名を取得し、モーダル内で表示させたい。
アプリの仕様
ruby on rails でポートフォリオサイトのようなものを作っています。
解決したいページの内容は、スキルを表示する表があり、スキルのレベルだけ編集可能にしており、セレクターで数値を選択し、保存ボタンを押す。保存ボタンが押されると、モーダルがオープンし、{スキル名}のレベルを保存しました!と表示される。
{}内に更新したスキル名が入るというような感じです。
発生している問題・エラー
<%= @skill.name %>
を取得できず、else処理になってしまう。
該当するソースコード
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="static">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body text-center mt-5">
<% if @skill.present? %>
<p><%= @skill.name %></p>
<% else %>
<p>スキルが更新されていません</p>
<% end %>
<button type="button" class="btn btn-primary us-btn" data-dismiss="modal">スキル編集ページに戻る</button>
</div>
</div>
</div>
</div>
def update
@skill = Skill.find(params[:id])
respond_to do |format|
if @skill.update(skill_params)
@updated_skill = true
format.turbo_stream do
render turbo_stream: turbo_stream.append(
:modal,
partial: 'shared/update_modal',
)
end
format.json { render json: { success: true } }
else
format.html { render 'edit', status: :unprocessable_entity }
format.json { render json: { success: false, errors: @skill.errors.full_messages } }
end
end
end
自分で試したこと
元々は、turboのことなどよくわからず、javascriptやindexページのcontroller経由して変数渡したりなど色々やっていましたが、turboを使用すれば、modalをパーシャルで準備して表示できる感じだったので、上記のようにしました。デバッグし、updateメソッドのどこかで止まっているのかと思いましたが、正常に動いており、レベルの更新も問題なくできています。
@skillにデータが格納されていることも確認できたので、何が問題なのかわからなくなりました。
index.html.erbはviews/positions/
配下にあります。
positions_controllerに変数受け取りのアクションが必要なのでしょうか?
51: def update
52: @skill = Skill.find(params[:id])
53: respond_to do |format|
54: if @skill.update(skill_params)
55: @updated_skill = true
56: format.turbo_stream do
57: render turbo_stream: turbo_stream.append(
58: :modal,
59: partial: 'shared/update_modal',
60: )
61: end
62:
=> 63: binding.pry
64:
65: format.json { render json: { success: true } }
66: else
67: format.html { render 'edit', status: :unprocessable_entity }
68: format.json { render json: { success: false, errors: @skill.errors.full_messages } }
69: end
70: end
71: end
[1] pry(#<SkillsController>)> @skill
=> #<Skill:0x0000ffff8d7928a8
id: 35,
position_id: 1,
name: "Go",
level: 70,
created_at: Mon, 15 May 2023 03:49:21.807342000 UTC +00:00,
updated_at: Thu, 18 May 2023 03:06:30.811758000 UTC +00:00>
[2] pry(#<SkillsController>)> @skill.name
=> "Go"
ご教授いただけますと幸いです🙇