2009-07-28 23 views
9

Câu hỏi đơn giản thực sự - làm cách nào để tôi sử dụng lựa chọn (ActionView :: Helpers :: FormOptionsHelper) với các tùy chọn được nhóm?Đã chọn nhóm trong Rails

Tôi đã làm cho nó hoạt động với một select_tag (ActionView :: Helpers :: FormTagHelper) nhưng tôi thực sự muốn có nó bằng cách sử dụng thẻ chọn để khớp với phần còn lại của biểu mẫu. Điều này có thể không?

lựa chọn của tôi trông như thế này:

[ 
    ['Group 1', ["Item 1", "Item 2", "Item 3"]], 
    ['Group 2',["Item 1", "Item 2", "Item 3", "Item 4"]] 
] 

trong khi quan điểm của tôi hiện nay là:

%tr#expense 
    %td 
    = f.text_field :value 
    = f.hidden_field :type, :value => mode 

Trả lời

22

Sửa

Correction, kể từ khi bạn đang sử dụng Mảng bạn sẽ cần grouped_options_for_select

E xample:

grouped_options = [ 
    ['Group 1', 
    ["Item 1", "Item 2", "Item 3"]], 
    ['Group 2', 
    ["Item 1", "Item 2", "Item 3", "Item 4"]] 
] 
grouped_options_for_select(grouped_options) 

In như sau:

<optgroup label="Group 1"> 
    <option value="Item 1">Item 1</option> 
    <option value="Item 2">Item 2</option> 
    <option value="Item 3">Item 3</option> 
</optgroup> 
<optgroup label="Group 2"> 
    <option value="Item 1">Item 1</option> 
    <option value="Item 2">Item 2</option> 
    <option value="Item 3">Item 3</option> 
    <option value="Item 4">Item 4</option> 
</optgroup> 

Lưu ý rằng bạn phải cung cấp của riêng bạn chọn thẻ để bọc này. Không có chức năng chọn sẽ làm nhóm cho bạn, chỉ cần phương pháp này.

Bạn sẽ vượt qua sự thận trọng của mình. The Way Rails (tm) để làm những gì bạn hỏi là sử dụng select_tag với grouped_options_for_select:

<%= select_tag "foo[bar]", 
grouped_options_for_select(@bars) %> 

Đây là những gì sẽ xảy ra khi bạn đi ra khỏi con đường bị đánh đập với Rails. :)

Dưới đây là một tài liệu tham khảo tôi chỉ tìm thấy trên google:

http://www.ruby-forum.com/topic/185407

+0

Bạn có ví dụ về điều này trong thực tế không? Tôi thấy điều này trong tài liệu, nhưng không thể tìm ra cách để nó hoạt động. –

+0

@Neil: xem ở trên – hobodave

+1

Điều này cũng tốt, ngoại trừ việc nó không hoạt động với lựa chọn truyền thống. Tôi rất thận trọng khi sử dụng select_tag, và điều đó có nghĩa là tôi cần phải cố gắng và tìm ra tên của phần tử trên bay. –

6

Bạn cũng có thể sử dụng một Hash thay vì mảng lồng nhau:

grouped_options = { 
'North America' => [['United States','US'], 'Canada'], 
'Europe' => ['Denmark','Germany','France'] 
} 


<%= select_tag "foo[bar]", 
grouped_options_for_select(grouped_options, 'Denmark') %> 

Ở đây, đó cũng là một tùy chọn chọn ('Đan Mạch')

Các vấn đề liên quan