2016-04-04 17 views
7

Bir kullanıcı girişi özel :action veya seçebileceğiniz bir :action özellikli: Bir kullanıcı özellikli :action yeni zorluklar seçerÖne çıkan nesneler için _form nasıl prepopulate edilir?

<%= f.text_field :action %> 
    Or choose a featured challenge: 
<%= f.collection_radio_buttons :action, [['Run a Mile','Run a Mile'], ['Drink 16oz of Water','Drink 16oz of Water'], ['Take a Picture','Take a Picture'], ['1 Drink Max','1 Drink Max'], ['See Eiffel Tower','See Eiffel Tower'], ['Write a Book','Write a Book'], ['Skydive','Skydive'], ['Start a Business','Start a Business'], ['No Snooze','No Snooze'], ['Visit All 50 States','Visit All 50 States'], ['Talk to a Stranger','Talk to a Stranger'], ['Try a New Recipe','Try a New Recipe'], ['Media-fast','Media-fast']], :first, :last %> 

ise/_form onun :action seçilmiş ile önceden doldurulmuş, ama şimdi İsterdim Yardımınızla bir sonraki seviyeye taşıyın!

<%= form_for(@challenge) do |f| %> 
    Challenge: <%= f.text_field :action %> 
    Do On: <%= f.collection_check_boxes :committed %> 
    Do For: <%= f.number_field :days_challenged %> 
<% end %> 

Nasıl, böyle bir özellikli meydan okuma diğer özelliklerini önceden doldurabilirsiniz ya da "Do Açık" "For Do"? Örneğin

kullanıcı özellikli :action seçerse: 'Run a Mile sonra Run a Mile, Mon, Wed, Fri, 30 Days formu önceden doldurulacaktır olacaktır.

+0

'Challenge' örneğini' @challenge = Challenge.new (days_challenged: 12) 'gibi değerlerle başlatabilir ve formunuzda' 12'yi 'days_challenged' için önceden doldurulmuş bir değer olarak görürsünüz. – MrYoshiji

+0

Merhaba @MrYoshiji, ama 100 özellikli zorluklar yaşadığımı varsayalım. Her biri için nasıl önceden doldurulmuş bir değer alabilirim? –

+0

Javascriptte bir seçenek mi yapıyor? – Shishir

cevap

2

simple_form ürününü reform ile kullanabilirsiniz. Reform, formunuzu dolduracak yöntemleri geçersiz kılabileceğiniz form nesnesi verir. İşte

bir sulandırılmış örnektir (eğer davanıza ayarlamak zorunda kalacak): yöntemlerde

class ChallengeForm < Reform::Form 
    property :action 
    property :committed 
    property :days_challenged 

    model :challenge 

    def commited 
    super || action_to_commited_hash[model.action] 
    end 

    def days_challenged 
    super || action_to_days_challenged_hash[model.action] 
    end 

    def action_to_days_challenged_hash 
    { 
     'Run a Mile' => 30, 
     'Take a Picture' => 12 
    } 
    end 

    def action_to_commited_hash 
    { 
     'Run a Mile' => ['Mon', 'Wed', 'Fri'], 
     'Take a Picture' => ['Tu', 'Thu'] 
    } 
    end 
end 

super yukarıda model için temsilci. getter yöntemlerini geçersiz kıldığınızı ve setters'u etkilemediğini unutmayın (form verisini yazmadan önce değiştirmek isterseniz de ayarları geçersiz kılabilirsiniz).

simple_form_for @form 

Raylar için süper yaygın biçimi kütüphanesi ve kendim kullanmayan düşünemiyorum: Şablonunuzda

yerine

form_for @challenge 

sahip olacak!

+0

Hey tamam, ben bir klasör uygulaması/formları yaptım, sonra kodunuzla 'challenge_form.rb' yarattım. Diğer formumu "simple_form_for @ form" olarak değiştirdim. Bu doğru mu? Oradan işe yaramayacağım, ikincil formda 'action_to_days_challenged_hash' veya 'action_to_commited_hash' ayarlanmıyor. Sadece 'action' hala –

+0

HTML Çıktısını ayarlar: 'Do For: ' Yapamam Bu yararlı. –

+0

Doğru görünüyor. Modeli reform okumada açıklandığı gibi forma mı geçiriyorsunuz? https://github.com/apotonick/reform (Üzgünüm, gerçekten 'basit_form' + 'reform' kullanımı hakkında konuştuğumu belirtmeliydim) - cevabımı güncelledim. –

İlgili konular