2012-04-19 38 views
9

Có rất nhiều kết quả cho tìm kiếm này trên google, và thậm chí nó được hỏi tại SO - nhưng các giải pháp được thảo luận cho đến nay không giúp tôi. Đây là vấn đề: Tôi có form_for @company |f| và tôi đang sử dụng f.collection_select cho company_status_id - nhưng khi biểu mẫu tải, tôi muốn trạng thái công ty thực tế được chọn nếu được đặt. Thông qua trình gỡ lỗi tôi biết, nó đã được thiết lập, nhưng tôi nhận được một giá trị mặc định được hiển thị ở đó. Dưới đây là các mã:f.collection_select không hiển thị giá trị đã chọn

= puts @company.company_status_id 
= f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value} 

Dưới đây là các htmnl tạo

<select id="company_company_status_id" prompt="-Select-" name="company[company_status_id]"> 
<option value="1">-Not Available-</option> 
<option value="2">Active</option> 
<option value="3">Bankrupt</option> 
<option value="4">Acquired</option> 
</select> 

Và các điều kiện vẫn như cũ ngay cả khi tôi làm:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => :selected => @company.company_status} 

Hoặc

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status} 
+0

Qua báo cáo kết quả puts đằng kia, tôi thấy company_status_id được thiết lập, nhưng không hoạt động đúng. Tôi đang sử dụng đường ray 2.3.11. [this] (http://stackoverflow.com/a/1065359/878451) câu trả lời cho biết chính xác những gì tôi muốn, và cũng là những gì tôi đang làm, nhưng những gì không hoạt động. –

+0

điều này sẽ hoạt động. hiển thị @ company.company_status_id và ListCache.company_statuses – tokland

+0

Bạn có thể đăng định nghĩa biểu mẫu của mình vì định nghĩa của nó sẽ phụ thuộc vào f.object là gì không? –

Trả lời

20

Đây là những gì cuối cùng tôi đã làm:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status_id.to_i} 

Tôi đọc trên các câu trả lời về một câu hỏi tương tự mà collection_select tự động chọn giá trị đã chọn bằng cách so sánh những gì được chuyển với thuộc tính của bộ sưu tập. dường như có sự khác biệt về các loại của chúng và so sánh int từ CompanyStatus với int của @ company.company_status_id.to_i đã được giải quyết. Mặc dù @ company.company_status_id được cho là int. Tôi có thể thấy điều đó trong db. Dù sao, nó dòng mã này đã làm việc.

Nếu bất kỳ ai có thể exaplain, tôi sẽ rất biết ơn!

+1

Câu trả lời tuyệt vời bro. Thiên tài. Đây là upvote của tôi. –

+0

điều này đã giúp rất nhiều. – Batman

+0

Nó rõ ràng sẽ không hoạt động với Mongoid. –

0

Sử dụng select_tag thay vào đó là

<%= form_for(@product, :html => {:multipart => true}) do |f| %> 


    <%= select_tag("product[category_id]", options_for_select(@categories.map { |cat| [cat.name, cat.id] })) %> 

    <%end%> 

Hy vọng điều này sẽ giúp bạn .....

+0

Nếu tôi sử dụng nó với đối tượng mẫu, f, nó trông như thế nào? Như thế này? '<% = f.select (" model_name_object [company_status_id] ", options_for_select (@ categories.map {| cat | [cat.name, cat.id]}))%>' –

2
<% form_for(@company) do |f| %> 
    <%= f.select(:company_status_id, ListCache.all.map {|lc| [lc.name, lc.id]}) %> 
<% end %> 
3

Nếu bạn sử dụng collection_select helper, cú pháp rất đơn giản:

<%= f.collection_select :category_id, Category.all, :id, :name, 
         prompt: true, selected: @product.category_id %> 

Tôi hy vọng điều này giúp đỡ

+0

Đây là giải pháp làm việc duy nhất. – prograils

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