2009-04-17 30 views
11

Tôi có một bộ sưu tập chọn như sau:Chọn bộ sưu tập Ruby Rails đang hiển thị giá trị "nhắc" trống không?

<%= f.collection_select :region_id, Region.find(:all), :id, :name, { :prompt => 'Select a State/Province' }, :style => "width: 200px;" %> 

Đôi khi dấu nhắc từ: Tùy chọn nhắc xuất hiện, nhưng đôi khi nó không. Có ai biết nơi tôi có thể bắt đầu khắc phục sự cố này không? Có lẽ tôi đã được nhìn vào nó quá lâu ...

+0

Chỉ cần làm rõ: bạn có nói rằng mã chính xác ở trên đôi khi hoạt động và đôi khi không, hoặc bạn có hai lựa chọn thu thập với mã tương tự một hoạt động và cái kia thì không? –

Trả lời

-1

Thay vì

:prompt => "Select a State/Province" 

thử

:allow_blank => "Select a State/Province" 

EDIT: Vâng sau khi kiểm tra các API tôi có thể thấy rằng tôi đã có nó bối rối, nhanh chóng là đúng cách theo tài liệu, nó có thể là nó chỉ đôi khi nó xuất hiện bởi vì đối tượng của bạn có một giá trị đã có và do đó dấu nhắc là có nhưng nó không phải là giá trị hiện đang được chọn trong danh sách thả xuống ???

+0

cảm ơn bạn đã xác minh. tuy nhiên, dấu nhắc thậm chí không xuất hiện trong danh sách khi có giá trị được chọn. nó không tồn tại. bây giờ, tôi đã hack nó trong JS, nhưng tôi là một chút bối rối như những gì đang xảy ra ... – Tony

+0

Đó là ': include_blank'. http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html – Chloe

43

:include_blank với giá trị tùy chọn trống của bạn có vẻ như là lừa. Hãy thử điều này:

{:include_blank => "Please select"} 
+1

điều này phải là câu trả lời được chấp nhận (Rails 3.2.6) –

+1

Chỉ cần một lưu ý cần biết: điều này sẽ không tôn trọng chuỗi được chuyển vào ' include_blank' nếu bạn đang sử dụng phương thức 'select_tag'. Thay vào đó, sử dụng 'prompt'. –

2

Tôi đã gặp sự cố tương tự. Sử dụng 'prompt' dường như tạo thuộc tính cho thẻ select, vấn đề là không có thuộc tính như vậy mà tôi biết. Cộng với rõ ràng của nó không phải những gì được mô tả trong tài liệu Rails http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_from_collection_for_select.

Sử dụng include_blank có vẻ là giải pháp tốt cho tôi.

Chúc mừng, Robin.

+0

Nếu nó đang tạo thuộc tính, thì bạn phải bao quanh dấu nhắc với dấu ngoặc, như '{prompt: true}'.Việc này sẽ tách băm tùy chọn cho phương thức trình trợ giúp Rails từ băm thuộc tính cho phần tử HTML. Chỉ có tham số băm cuối cùng của một phương thức có thể đi mà không cần niềng răng. – Chloe

11

:prompt xuất hiện trong danh sách khi không có giá trị được chọn.

:include_blank luôn xuất hiện trong danh sách, ngay cả khi bạn đã tải lựa chọn có giá trị đã chọn.


nếu bạn muốn bạn chọn để luôn có "Select a State/Province" như tùy chọn đầu tiên:

<%= f.collection_select :region_id, Region.all, :id, :name, include_blank: 'Select a State/Province' %> 

nếu bạn muốn bộ sưu tập của bạn để có "Select a State/Province" như tùy chọn đầu tiên chỉ khi một khu vực chưa được chọn:

<%= f.collection_select :region_id, Region.all, :id, :name, prompt: 'Select a State/Province' %> 

nguồn: http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

+1

': prompt' cũng xuất hiện luôn, nhưng không được chọn khi tải trang, nếu có giá trị được chọn. –

+0

@AlexPopov Tôi không tin đó là sự thật. Có vẻ như nếu đối tượng của bạn có một giá trị cho, trong trường hợp này, 'region_id' khi biểu mẫu tải, giá trị nhắc sẽ không ở đó, trong khi' include_blank' sẽ ở đó. –

+0

@JoshPinter Tôi thấy cùng một vấn đề: ngay cả sau khi một giá trị khác được chọn, giá trị nhắc vẫn là một tùy chọn có thể chọn. –

0

Hãy thử điều này <%= f.collection_select :region_id, Region.all, :id, :name, {prompt: 'Select a State/Province'}, {class: "form-control"} %>

+2

Xin chào và chào mừng bạn đến với SO. Trong tương lai, vui lòng thêm thông tin bổ sung khi trả lời câu hỏi để OP và những người khác trong tương lai có thể hiểu rõ hơn về giải pháp của bạn – Deepend

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