İşte şimdi kullanıyorum kod parçası:
<%= f.select :project_id, @project_select %>
Varsayılan değer params[:pid]
, sayfa yüklendiğinde eşit olacak şekilde nasıl değiştirilir ?
İşte şimdi kullanıyorum kod parçası:
<%= f.select :project_id, @project_select %>
Varsayılan değer params[:pid]
, sayfa yüklendiğinde eşit olacak şekilde nasıl değiştirilir ?
Yanıtlar:
Bunu yapmalı:
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
options_for_select
daha iyi bir yoldur. Herhangi bir durum için iyidir, form düzenleme için de iyidir.
Geçerli örneğin doğru niteliğini kullanın (örneğin @work.project_id
):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
select_tag
de çalışır . Teşekkürler gerçekten de bana yardımcı oldu.
options_for_select(..., f.object.project_id )
Tüm bu yanıtların sorunu, kaydınızı düzenlemeye çalışsanız bile alanı varsayılan değere ayarlamalarıdır.
Varsayılanı mevcut değerinize ayarlamanız ve ardından yalnızca bir değeriniz yoksa gerçek varsayılana ayarlamanız gerekir. Şöyle ki:
f.select :field, options_for_select(value_array, f.object.field || default_value)
Size aşina olmayan herkes için f.object.field
her zaman şunu kullanın f.object
ve alan adınızı bunun sonuna ekleyin.
select2
JS eklentisi ile çalışır . Aynı formda kayıtlar oluşturuyor veya düzenliyorsanız ve özellikle yer tutucu metniyle select2 kullanıyorsanız mükemmel çalışır.
Bunu dene:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
params[:pid]
işe yaramadı, ancak örneğiniz işe yaradı.
params [: pid] bir dize ise, eğer bir formdan geliyorsa, muhtemelen
params[:pid].to_i
seçim listesinde seçilecek doğru öğe için
@project
değişkenimi veritabanı tablosundan bir kimlikle doldurduktan sonra , bir başlık yerine, bu kod form.select
yardımcısının arkasına eklendi : selected: @project
Teşekkürler @danengle
Çözüm buldum ve RoR'da oldukça tecrübesiz olduğumu fark ettim.
Yukarıda açıklanan görünümü yöneten denetleyicinin içine şunu ekleyin:
@work.project_id = params[:pid] unless params[:pid].nil?
İşe bu olsun ve ben doğru değil sadece "seçilmiş" html öznitelik eklemek için gerekli bulundu olamazdı <option>
etiketi ama aynı zamanda hiç <select>
etiketi. Seçim etiketinin seçilen özniteliğindeki MDN belgeleri şunları söylüyor:
seçilmiş - Boolean özniteliği, başlangıçta belirli bir seçeneğin seçilebileceğini gösterir.
Bu, kodun şöyle görünmesi gerektiği anlamına gelir:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
Alternatif olarak, f.select öğesinin ilk bağımsız değişkeni belirli bir özniteliği çektiği için denetleyicide: project_id özniteliğini ayarlayabilirsiniz.
F nesnesini yazdırmaya çalışırsanız, seçilen öğeyi almak için problanabilecek f.object olduğunu göreceksiniz (tüm raylar sürümü> 2.3 için geçerlidir)
logger.warn("f #{f.object.inspect}")
bu nedenle, uygun seçili seçeneği elde etmek için aşağıdaki komut dosyasını kullanın:
:selected => f.object.your_field
Daha önce açıklanmış, bir örnek vermeye çalışacak
seçim listesinin olmasına izin ver
select_list = { eligible: 1, ineligible: 0 }
Yani aşağıdaki kod
<%= f.select :to_vote, select_list %>
<select name="to_vote" id="to_vote">
<option value="1">eligible</option>
<option value="0">ineligible</option>
</select>
Bu nedenle, varsayılan olarak seçilen bir seçeneği yapmak için seçilmiş: değeri kullanmamız gerekir .
<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>
eğer can_vote? seçilen set değerini true olarak döndürür : 1 sonra ilk değer ikinci olarak seçilecektir.
select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible">
<option value="1">eligible</option>
<option selected="selected" value="0">ineligible</option>
</select>
eğer seçim seçenekleri hast yerine sadece bir dizi listesiyse, seçilen sadece seçilecek değer olacaktır.
select_list = [ 'eligible', 'ineligible' ]
şimdi seçilen
<%= f.select :to_vote, select_list, selected: 'ineligible' %>
Mike Bethany'nin yukarıdaki yanıtı, yeni bir kayıt oluşturulurken varsayılan bir değer ayarlamak ve yine de düzenleme formunda kullanıcının seçtiği değeri göstermek için çalıştı. Ancak, bir model doğrulaması ekledim ve formu göndermeme izin vermedi. Alanda bir model doğrulaması yapmak ve varsayılan bir değer ile kullanıcının düzenleme modunda seçtiği değeri göstermek benim için işe yarayan şeydi.
<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>
Model geçerliliği
validates :project_id, presence: true