2

Rails填充由各种input标记助手(例如text_field)自身生成的元素的idclass。例如,在一个form_for(@athlete),加入text_field :height产生在轨道4中使用连字符而不是不规则链接的HTML“class”和“id”属性

<input name="athlete_height" ... /> 

我使用的HTML ID和班级连字符的坚决拥护者(和CSS选择器因此)(通过读取MDN,因为我喜欢写使用语言规定的约定 - 如data-stuff - 因为它看起来更好看)。

我在这里和那里看到,在Rails中你无法修复这个问题。这将是相当令人失望的。 你知道解决这个问题的方法吗?

回答

3

恐怕下划线是硬编码的。从https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/form_helper.rb,线446-450:

options[:html].reverse_merge!(
    class: as ? "#{action}_#{as}" : dom_class(object, action), 
    id:  (as ? [namespace, action, as] : [namespace, dom_id(object, action)]).compact.join("_").presence, 
      method: method 
) 

可以随时为自己的id和class,或中的ActionView补丁代码,这可能是困难的,繁琐且容易出错的

+0

您也可以重写'dom_class'和'dom_id'来执行类似'super.dasherize' – kikito

0

最近就遇到了这个非常相同的情况和@lobanovadik有一个很好的解决方案:只写你自己的帮手方法。

# app/helpers/dom_helper.rb 
module DomHelper 
    dom_id_helper(model) 
    dom_id(model).dasherize 
    end 
end 

# view.html.erb 
<%= link_to "Text", path, id: dom_id_helper(@model) %> 
    #=> <a href="path", id: "model-ID">Text</a> 

这有没有猴子修补的Rails或与任何默认的方法/配置搞乱的好处。因此,你不会“破坏”Rails的任何更新。

它也给你更大的灵活性,因为你现在可以根据情况使用破折号或下划线。例如,假设有一个预计ID具有下划线的gem ...你不会破坏它。

作为个人喜好,我总是在我自己的帮助器方法中附加_helper,以便我知道这是一个辅助方法,它来自我而不是来自Rails(更易于调试)。

相关问题