4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsでeach(ループ)の中にモーダルを入れても変数が適用されない問題

Last updated at Posted at 2019-11-28

問題

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で回している変数のそれぞれの値を反映させることができた。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?