問題
variables.each do |variable|
という繰り返しのブロックの中で
それぞれの異なるvariableをmodalに渡す場合、
下記コードだと最初のvariableの値しか表示されない。
<% books.each |book| do %>
<a href="#book_modal">クリックするとモーダルを表示するリンク</a>
<div class="modalList" id="book_modal">
# ここはモーダル
</div>
<% end %>
例えば、
variables = [var1, var2, var3, var4]
とした場合、本来期待する動きは
1つめのモーダルには、var1
2つめのモーダルには、var2
3つめのモーダルには、var3
4つめのモーダルには、var4
だが、上記だと4つのモーダルすべてに
variable = var1
が反映され、var2, var3, var4
が反映されない。
解決策
モーダルのidが一意となるような実装にしてやればよい。
<% books.each |book| do %>
<a href="#book_modal-<%= book.id %>">クリックするとモーダルを表示するリンク</a>
<div class="modalList" id="book_modal-<%= book.id %>">
# ここはモーダル
</div>
<% end %>
最初にあげたコードだと、4つのモーダルのidがすべて book_modal
のため、
最初のvariableしか反映されなかった。
なので、Bookオブジェクトに一意に定められている id
を使用して、
id = "book_modal-<%= book.id %>"
とした。
すると、
1つめのモーダルのid: book_modal-var1
2つめのモーダルのid: book_modal-var2
3つめのモーダルのid: book_modal-var3
4つめのモーダルのid: book_modal-var4
のように各モーダルのidが変わってくれるので、
eachで回している変数のそれぞれの値を反映させることができた。