2011-10-02 1 views
15

에 추가 "데이터 -"필드는 내가 가진 :레일 Formtastic은 : 옵션 태그

form.input :duration, as: select, collection: {} 

내가이 필요합니다

<option value="" data-price="XXX"></option> 

레일은 HTML5 데이터가 옵션 태그 속성을 지원하지 않습니다. Formtastic suggests을 사용하여 이에 대한 도우미 메서드를 만듭니다.

Formtastic readme describes 입력 태그를 확장하는 방법. 그러나 select_input.rb에서 옵션 태그에 영향을 줄 수있는 방법을 찾을 수 없습니다. 그래서, 어떻게해야합니까?

또한 정확하게 필요한 항목을 수행하는 enhanced_select 보석을 찾았지만 formtastic에서 작동하도록 만들 수는 없습니다.

답변

28

실제로 레일스는 모든 종류의 html 태그를 옵션에 추가하는 것을 지원합니다. 일반적으로, 당신은 것입니다 :

options_for_select([['First', 1], ['Second', 2]]) 

당신이 해시 키/값은 옵션으로 HTML 속성으로 추가됩니다 각 옵션, 예를 들어,의 배열로 해시를 추가 할 경우 당신에게

<option value="1">First</option> 
<option value="2">Second</option> 

을 줄 것이다

options_for_select([['First', 1, {:'data-price' => 20}], 
        ['Second', 2, {:'data-price' => 30}]]) 

필요한 태그를 생성합니다 : 당신이 모델이라는 항목이 가정

<option value="1" data-price="20">First</option> 
<option value="2" data-price="30">Second</option> 
+0

Rails 2.3에는 없습니다. – Zabba

8

을, 당신은 실제로과 같이 formtastic에서이 작업을 수행 할 수 있습니다 : 당신이하고있는 본질적으로 무엇을

form.select :duration, 
      collection: Items.map{|item| [item.name, item.id, {"data-price" => item.price}]} 

을 각 배열의 최종 값이 해시 인 배열 배열을 전달 중입니다. 예.

[ 
    ['Item 1', 1, {"data-price" => '$100'}], 
    ['Item 2', 2, {"data-price" => '$200'}] 
] 

레일 3+ (아마도 2.x에서 - 내가 확인하지 않은) 배열 등의 해시를 사용하여 간단하게 옵션 태그의 HTML에 추가합니다. 다음 당신에게주기 :

<option data-price="$100" value="1">Item 1</option> 
<option data-price="$200" value="2">Item 2</option> 
2
options_for_select([ 
    ['Item 1', 1, data:{price: 121, delivery: 11}], 
    ['Item 2', 2, data:{price: 122, delivery: 22}] 
]) 

가 생성하는 데이터를 사용하여

<option data-delivery="11" data-price="121" value="1">Item 1</option> 
<option data-delivery="22" data-price="122" value="2">Item 2</option> 

장점

: {...}는 더 간결하고 여러 데이터 태그를 사용하는 경우입니다 수 코드를 저장하십시오.