首页 > 解决方案 > 在 ruby​​ on rails 中,动态 id 不适用于两个词,但可以完美地用于一个词——使用引导程序崩溃

问题描述

我正在研究我项目的设备部分。我已将brandname品牌名称分组并传递为id. 我的问题是动态 id 不适用于两个词,例如。Hero Honda但完美地为一个词工作,例如。Yamaha

我的控制器的代码是:

  def index
    @devices = Device.all.group_by(&:brandname)
    @device = current_user.devices.build
  end

这是我的视图代码

 button.btn.btn-sm.btn-outline-info aria-controls="12" aria-expanded="false" data-target="#hello#{device_name}" data-toggle="collapse" type="button" 
          | Details
    .collapse.container.mx-5 id="hello#{device_name}"
          .container.bg-light 
            .row.bg-secondary.p-2.my-2
                .col-3.col-md-3.text-center MAC address
                .col-2.col-md-2.text-center Serial Number
                .col-2.col-md-2.text-center Software
                .col-2.col-md-2.text-center  Number
                .col-1.col-md-1.text-center  Status
              
                           
            - device_data.each do |device|
              .row.py-2
                    .col-3.text-center = device.macaddress
                    .col-2.text-center = device.serialnumber
                    .col-2.text-center = device.softwareversion
                    .col-2.text-center = device.IMEInumber
                    .col-1.text-center = device.status
                    .col-2.text-center = device.id 

在这里,我介绍了浏览器的控制台程序如何获取动态 id。

标签: ruby-on-railsbootstrap-4

解决方案


HTML id 标签不能有空格。因此,我建议您首先对其进行转换brandname以使其不包含空格。例如:您可以将空格转换为-_

id="hello-#{device_name.parameterize}"
# => hello-hero-honda

或者

id="hello_#{device_name.parameterize.underscore}"
# => hello_hero_honda

注意:使用除 ASCII 字母、数字、“_”、“-”和“.”以外的字符 可能会导致兼容性问题,因为它们在 HTML 4 中是不允许的。虽然这个限制在 HTML5 中已经解除,但为了兼容性,ID 应该以字母开头。参考

所以 camelCase 似乎是一个更好的选择。

id="hello#{device_name.parameterize.underscore.camelize}"
# => helloHeroHonda

推荐阅读