Как добавить код рельса в атрибут id в теге div? - PullRequest
0 голосов
/ 02 января 2019

Я хотел бы сделать что-то вроде этого: <div id="<%=service.name%>"

Однако я просто не могу заставить его работать.Мне нужна помощь!Я пытаюсь создать модальное значение для каждой нажатой кнопки, но с помощью только модального div в html.erb.

Чтобы модалы работали, они должны иметь одинаковый идентификатор.

<% @services.each do |service| %>

<div class="card">
<a class="card-b" href="#" data-toggle="modal" data-target="# <%=service.name%> ">
</div>

<div class="modal" id=" <%=service.name%> " tabindex="-1" role="dialog" aria-hidden="true">
Hello this is the modal.
</div>

<% end %>

Я хотел бы использовать код рельсов в теге ID, я не знаю, возможно ли это?

РЕДАКТИРОВАТЬ:

Я попробовал лучший ответи это работало только для нескольких модалов, а остальные - нет.Затем я добавил столбец modal_tag в свою таблицу, и все модалы сработали.Спасибо!

Мой код сейчас id="<%=service.modal_tag%>

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Также можно использовать object_id.

Рельсы: data-target="#<%= service.object_id %>">

Benchmark:

   user     system      total        real
0.071505   0.000187   0.071692 (  0.072017) #SecureRandom.hex
0.004685   0.000016   0.004701 (  0.004727) #__id__
0.004500   0.000001   0.004501 (  0.004503) #object_id
0 голосов
/ 03 января 2019

Ruby on Rails имеет метод dom_id для генерации уникальных идентификаторов для использования в документах HTML.Кроме того, я не люблю смешивать теги HTML и ERB - поэтому я, вероятно, буду работать с вспомогательным методом

# in a helper
def service_modal(service, &block)
  tag.div(class: 'card') do
    tag.a(class: 'card-b', data: {toggle: 'modal', target: dom_id(service) }, href: '#')
  end +

  tag.div(class: 'modal', dom_id(service), tabindex: 1, role: 'dialog', 'aria-hidden': 'true') do
    capture(&block)
  end
end

и использовать его следующим образом:

# in the view
<% @services.each do |service| %>
  <%= service_modal(service) do %>
    Hello this is the modal.
  <% end %>
<% end %>
0 голосов
/ 03 января 2019

Я предпочитаю использовать уникальное значение, например SecureRandom.hex или __id__, как указано engineersmnky, вместо использования идентификаторов моделей. Код будет выглядеть примерно так:

# You may also have to require 'securerandom' within your rails app 
# (can't remember if that comes in automatically or not)
<% @services.each do |service| %>
  <!-- Either option for random_id works below -->
  <% random_id = SecureRandom.hex %> 
  <% random_id = service.__id__ %>

  <div class="card">
    <a class="card-b" href="#" data-toggle="modal" data-target="#<%= random_id %>">
  </div>

  <div class="modal" id="<%= random_id %>" tabindex="-1" role="dialog" aria-  hidden="true">
    Hello this is the modal.
  </div>
<% end %>

Причина, по которой я предпочитаю это, заключается в том, что она не пропускает идентификаторы базы данных (если это то, что вас волнует), и у вас меньше шансов получить конфликты идентификаторов в случае, если этот модал внедряется в другие страницы.


И, учитывая простой скрипт бенчмаркинга, похоже, что __id__ является более производительным из двух вариантов:

$ cat unique_id.test.rb
require 'securerandom'
require 'benchmark'

n = 100_000
Benchmark.bm do |x|
  x.report { n.times do |n|  ; SecureRandom.hex; end }
  x.report { n.times do |n|  ; n.__id__ ; end }
end

$ ruby unique_id.test.rb
   user     system      total        real
   0.180000   0.000000   0.180000 (  0.176293)
   0.000000   0.000000   0.000000 (  0.005554)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...