Làm cách nào để đặt các tùy chọn HTML cho collection_select trong Rails?


82

Tôi dường như không thể tìm thấy cú pháp để thêm một lớp vào một thẻ được chọn do Rails tạo ra collection_select. Một số trợ giúp?


1
Bạn có thể cho một số ví dụ bạn muốn làm gì không? Tôi không hiểu câu hỏi của bạn.
klew

Chắc chắn rồi ... Tôi đang sử dụng rails '<% = f.collection_select ...%> để tạo: <select ...> ... </select> Tôi chỉ muốn nó là: <select class = "foo "...> ... </select>
tybro0103

Câu trả lời:


180

Nhiều trình trợ giúp Rails lấy nhiều đối số băm. Đầu tiên thường là các tùy chọn để kiểm soát chính trình trợ giúp và thứ hai là html_options nơi bạn chỉ định id tùy chỉnh, lớp, v.v.

Định nghĩa phương thức trông như thế này:

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

Bạn sẽ nhận thấy nhiều dấu '= {}' trong danh sách các tham số. Để sử dụng điều này, tập hợp các tùy chọn đầu tiên mà bạn chỉ định phải thực sự được đặt trong dấu ngoặc nhọn:

collection_select(:user, :title, UserTitle.all, :id, :name, {:prompt=>true}, {:class=>'my-custom-class'})

Nếu bạn không có bất kỳ tùy chọn nào để chỉ định ngoài lớp html, thì chỉ cần đặt một trình giữ chỗ băm trống:

collection_select(:user, :title, UserTitle.all, :id, :name, {}, {:class=>'my-custom-class'})

Tài liệu API bổ sung có sẵn tại: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select


À, lẽ ra tôi nên đọc tài liệu kỹ hơn một chút :)
tybro0103 22/12/09

1
Dưới đây là một phần mở rộng của câu trả lời này cho thấy làm thế nào để thay đổi phong cách .css và sử dụng jQuery onchange sự kiện<%= collection_select(:question , :text, Question.all , :id, :text, {:prompt => 'Select Question...'}, {:class=>'input', :name=>'normalSelect', :id=>'normalSelect', :style=>'width:50%', :onchange=>"$('#accordion').accordion('activate',2);$('#blind').show('blind', 500)"}) %>
wantrapreneur

Drew, câu trả lời hay. Xóa tất cả những nghi ngờ của tôi về collection_select.
Swapnil Chincholkar

Câu trả lời khá chính xác của bạn. Cảm ơn rất nhiều.
Francisco Quintero

3
Cảm ơn bạn đã giải thích rõ ràng. Đây là một trong những thứ phức tạp của Rails và được ghi lại trong RailsDocs kém.
lacostenycoder

9
= f.collection_select :category_id, Category.order(:name), :id, :name, {}, {class: "store-select"}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.