Đây là một đoạn mã tôi đang sử dụng:
<%= f.select :project_id, @project_select %>
Làm cách nào để sửa đổi nó để làm cho giá trị mặc định của nó bằng với params[:pid]
khi trang được tải?
Đây là một đoạn mã tôi đang sử dụng:
<%= f.select :project_id, @project_select %>
Làm cách nào để sửa đổi nó để làm cho giá trị mặc định của nó bằng với params[:pid]
khi trang được tải?
Câu trả lời:
Điều này nên làm điều đó:
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
options_for_select
là cách tốt hơn. Nó là tốt cho bất kỳ tình huống, tốt cho chỉnh sửa biểu mẫu quá.
Sử dụng thuộc tính đúng của thể hiện tại (ví dụ @work.project_id
):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
select_tag
quá. Cảm ơn nó thực sự đã giúp tôi quá.
options_for_select(..., f.object.project_id )
Đường ray 3.0.9
select options_for_select([value1, value2, value3], default)
value3], default
Vấn đề với tất cả các câu trả lời này là chúng đặt trường thành giá trị mặc định ngay cả khi bạn đang cố chỉnh sửa bản ghi của mình.
Bạn cần đặt mặc định cho giá trị hiện tại của mình và sau đó chỉ đặt nó thành mặc định thực tế nếu bạn không có giá trị. Thích như vậy:
f.select :field, options_for_select(value_array, f.object.field || default_value)
Đối với bất cứ ai không quen thuộc với f.object.field
bạn luôn luôn sử dụng f.object
sau đó thêm tên trường của bạn vào cuối đó.
select2
plugin JS. Hoạt động hoàn hảo nếu bạn đang tạo hoặc chỉnh sửa các bản ghi với cùng một hình thức và sử dụng select2, đặc biệt là với văn bản giữ chỗ.
Thử cái này:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
params[:pid]
không hoạt động, nhưng ví dụ của bạn đã làm.
nếu params [: pid] là một chuỗi, nếu nó xuất phát từ một biểu mẫu, thì có lẽ bạn sẽ cần phải sử dụng
params[:pid].to_i
cho mục chính xác được chọn trong danh sách chọn
@project
biến của mình bằng id từ bảng cơ sở dữ liệu, thay vì tiêu đề, mã này hoạt động được gắn vào mặt sau của người form.select
trợ giúp: selected: @project
Cảm ơn bạn @danengle
Tôi đã tìm thấy giải pháp và tôi thấy rằng tôi khá thiếu kinh nghiệm trong RoR.
Bên trong bộ điều khiển quản lý khung nhìn được mô tả ở trên thêm điều này:
@work.project_id = params[:pid] unless params[:pid].nil?
Tôi không thể làm việc này và thấy rằng tôi cần thêm thuộc tính html "đã chọn" không chỉ vào <option>
thẻ chính xác mà còn cho <select>
thẻ. Tài liệu của MDN về thuộc tính được chọn của thẻ chọn nói:
đã chọn - Thuộc tính Boolean chỉ ra rằng một tùy chọn cụ thể có thể được chọn ban đầu.
Điều đó có nghĩa là mã sẽ giống như:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
Ngoài ra, bạn có thể đặt thuộc tính: project_id trong bộ điều khiển, vì đối số đầu tiên của f.select kéo thuộc tính cụ thể đó.
Nếu thử in đối tượng f, thì bạn sẽ thấy rằng có f.object có thể được thăm dò để lấy mục đã chọn (áp dụng cho tất cả các phiên bản rails> 2.3)
logger.warn("f #{f.object.inspect}")
vì vậy, sử dụng tập lệnh sau để có tùy chọn được chọn phù hợp:
:selected => f.object.your_field
Nó đã được giải thích, Sẽ cố gắng đưa ra một ví dụ
hãy để danh sách chọn
select_list = { eligible: 1, ineligible: 0 }
Vì vậy, đoạn mã sau dẫn đến
<%= f.select :to_vote, select_list %>
<select name="to_vote" id="to_vote">
<option value="1">eligible</option>
<option value="0">ineligible</option>
</select>
Vì vậy, để tạo một tùy chọn được chọn theo mặc định, chúng ta phải sử dụng select: value .
<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>
nếu canvote? trả về true nó được đặt : 1 thì giá trị đầu tiên sẽ được chọn thứ hai.
select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible">
<option value="1">eligible</option>
<option selected="selected" value="0">ineligible</option>
</select>
nếu các tùy chọn được chọn chỉ là một danh sách mảng thay vì vội thì thì lựa chọn sẽ chỉ là giá trị được chọn chẳng hạn nếu
select_list = [ 'eligible', 'ineligible' ]
bây giờ người được chọn sẽ chỉ mất
<%= f.select :to_vote, select_list, selected: 'ineligible' %>
Câu trả lời của Mike Bethany ở trên đã hoạt động để đặt giá trị mặc định khi bản ghi mới được tạo và vẫn có giá trị mà người dùng đã chọn hiển thị trong biểu mẫu chỉnh sửa. Tuy nhiên, tôi đã thêm một xác nhận mô hình và nó sẽ không cho phép tôi gửi biểu mẫu. Đây là những gì làm việc cho tôi để xác thực mô hình trên trường và để hiển thị giá trị mặc định cũng như giá trị mà người dùng đã chọn khi ở chế độ chỉnh sửa.
<div class="field">
<%= f.label :project_id, 'my project id', class: "control-label" %><br>
<% if @work.new_record? %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], true), {}, required: true, class: "form-control" %><br>
<% else %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], @work.project_id), {}, required: true, class: "form-control" %><br>
<% end %>
</div>
mẫu chính thức
validates :project_id, presence: true
Điều này sẽ làm việc cho bạn. Nó chỉ chuyển {:value => params[:pid] }
đến biến html_options.
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>