2009-03-07 3 views
9

Qual è il modo corretto di creare caselle di controllo relative a una determinata domanda in Ruby on Rails? Al momento ho:Caselle di controllo su Rails

<div class="form_row"> 
    <label for="features[]">Features:</label> 
    <br><%= check_box_tag 'features[]', 'scenarios' %> Scenarios 
    <br><%= check_box_tag 'features[]', 'role_profiles' %> Role profiles 
    <br><%= check_box_tag 'features[]', 'private_messages' %> Private messages 
    <br><%= check_box_tag 'features[]', 'chatrooms' %> Chatrooms 
    <br><%= check_box_tag 'features[]', 'forums' %> Forums 
    <br><%= check_box_tag 'features[]', 'news' %> News 
    <br><%= check_box_tag 'features[]', 'polls' %> Polls 
</div> 

Voglio anche essere in grado di controllare automaticamente gli elementi selezionati in precedenza (se il presente modulo è stato ri-caricata). Come caricare i parametri nel valore predefinito di questi?

risposta

14

Stai guardando il seguente:

<div class="form_row"> 
    <label for="features[]">Features:</label> 
    <% [ 'scenarios', 'role_profiles', ... , 'polls' ].each do |feature| %> 
     <br><%= check_box_tag 'features[]', feature, 
       (params[:features] || {}).include?(feature) %> 
     <%= feature.humanize %> 
    <% end %> 
</div> 

Anche se si dispone già di un modello Feature, con un tavolo features e un rapporto has_many :features, probabilmente vuole questo:

<div class="form_row"> 
    <label for="feature_ids[]">Features:</label> 
    <% for feature in Feature.find(:all) do %> 
     <br><%= check_box_tag 'feature_ids[]', feature.id, 
       @model.feature_ids.include?(feature.id) %> 
     <%= feature.name.humanize %> 
    <% end %> 
</div> 
+0

indefinita variabile locale o metodo 'features 'per # alamodey

+0

Bene, quale modello ha l'associazione delle caratteristiche e quale variabile è memorizzata? @articolo? @Prodotto? :) – vladr

+0

In realtà, perché non pubblicare l'intero codice per la visualizzazione e l'azione (dal controller) _e i modelli rilevanti? – vladr