2

레일은 다양한 input 태그 헬퍼 (예 : text_field)를 사용하여 생성 된 요소의 idclass을 채 웁니다. 내가 쓰고 좋아하기 때문에 예를 들어, form_for(@athlete)에, 추가, text_field :height는 (결과적으로 CSS 선택기에서) (MDN을 읽어 레일즈 4에서 바람직하지 않은 하이픈 대신 HTML을 사용하는 HTML "class"및 "id"속성

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

내가 HTML ID와 클래스에 하이픈의 사용의 강력한 옹호자 생성 data-stuff에서와 같이 언어로 규정 된 규칙을 사용하십시오.

나는 레일즈에서 이것을 고칠 수 없다는 것을 여기서 읽고있다. 이것은 꽤 실망 스러울 것이다. 이 문제를 해결하는 방법을 알고 있습니까?

답변

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 
) 

당신은 항상, 하드 지루하고 오류가 발생하기 쉬운

+0

'dom_class'와'dom_id'를 오버라이드하여'super.dasherize'와 같은 일을 할 수도 있습니다. – kikito

0

최근이 매우에 달려있을 수 있습니다 자신의 ID와 클래스 또는 ActionView의 패치 코드를 제공 할 수 있습니다 같은 상황과 @lobanovadik은 좋은 해결책을 가지고있다 : 당신 만의 도우미 메서드를 작성하라.

이것은 기본 방법/구성으로 원숭이 패치를하지 않거나 망가 뜨리지 않는 이점이 있습니다. 따라서 레일스에 대한 업데이트를 "중단"하지 않습니다.

상황에 따라 대시 또는 밑줄을 모두 사용할 수 있으므로 유연성이 뛰어납니다. 예를 들어, ID가 밑줄을 가질 것으로 기대하는 보석이 있다고 가정 해 봅시다.

개인적으로 나는 항상 자신의 도우미 메서드에 _helper을 추가하여 도우미 메서드임을 알았고 그것이 나로부터 왔고 Rails (디버깅하기 쉽지 않음)로부터 왔음을 알았습니다.