我想做这样的事情:<div id="<%=service.name%>"
但是,我只是无法正常工作。我需要帮助!我正在尝试为每个单击的按钮创建一个模式,但仅在html.erb中的模式div上创建。
要使模式起作用,它们必须具有相同的ID。
<% @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标签中使用Rails代码,我不知道是否可行?
编辑:
我尝试了最好的答案,但它仅适用于某些模态,而其余的则无效。然后,我在表中添加了modal_tag
列,所有模式都起作用。谢谢!
我的代码现在为id="<%=service.modal_tag%>
答案 0 :(得分:4)
我更喜欢使用SecureRandom.hex
所指出的唯一值,例如__id__
或engineersmnky
,而不是使用模型ID。代码看起来像这样:
# 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(如果您对此很在意),并且如果将此模式嵌入其他页面中,则ID冲突的可能性就较小。
给定一个简单的基准测试脚本,看起来__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)
答案 1 :(得分:3)
Ruby on Rails具有一个dom_id
method,可以生成用于HTML文档中的唯一ID。此外,我不喜欢将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 %>
答案 2 :(得分:0)
此外,您可以使用object_id
。
路轨::data-target="#<%= service.object_id %>">
基准:
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