2016-06-19 21 views
0

Ich versuche, ein Formular in meiner Rails 4 App, die zwei Auswahl-Tags hat. Eine für die Kategorie und die andere für die Unterkategorie. Ich möchte, dass die Optionen in der Unterkategorie durch die Auswahl für die Kategorie bestimmt werden.Schienen - Bestückung Auswahlmenüs für Kategorie und dann Unterkategorie

Im Moment habe ich diese Form:

<div class="nested-fields"> 
<div class="container-fluid"> 

    <div class="form-inputs"> 

    <%= f.input :irrelevant, :as => :boolean, :label => "Is an ethics review required or applicable to this project?" %> 

    <%= f.input :category, collection: [ "Risk of harm", "Informed consent", "Anonymity and Confidentiality", "Deceptive practices", "Right to withdraw"], :label => "Principle", prompt: 'select' %> 

    <%= f.input :subcategory, collection: text_for_subcategory(@category), :label => "Subcategory", prompt: 'select' %> 



    </div> 
    </div> 
    </div> 

ich auch einen Helfer haben:

module EthicsHelper 
    def text_for_subcategory(category) 
     if category == 'Risk of harm' 
      [ "Physical Harm", "Psychological distress or discomfort", "Social disadvantage", "Harm to participants", "Financial status", "Privacy"] 
     elsif category == 'Informed consent' 
      ["Explanation of research", "Explanation of participant's role in research"] 
     elsif category == 'Anonymity and Confidentiality' 
      ["Remove identifiers", "Use proxies", "Disclosure for limited purposes"] 
     elsif category == 'Deceptive practices' 
      ["Feasibility"] 
     else category == 'Right to withdraw'  
      ["Right to withdraw from participation in the project"] 
     end 
    end 

end 

Wenn ich dies versuchen, unabhängig von der Auswahl, die ich in der Kategorie Feld machen, die Das Feld Unterkategorie wird nur mit dem letzten Attribut gefüllt (Widerrufsrecht).

Etwas ist falsch in dem, was ich oben getan habe und ich kann nicht herausfinden, was es ist.

Kann jemand sehen, wo ich falsch gelaufen bin?

+0

Sie sollten Javascript verwenden, um diese Funktionalität hinzuzufügen. – webster

+0

@rahul - hast du irgendeine Anleitung, wie das geht? – Mel

+0

finden Sie meine Antwort unten. – webster

Antwort

0

hinzufügen Klassen an die Auswahlfelder:

<%= f.input :category, collection: [ "Risk of harm", "Informed consent", "Anonymity and Confidentiality", "Deceptive practices", "Right to withdraw"], :label => "Principle", prompt: 'select', class: "main_category" %> 

<%= f.input :subcategory, collection: text_for_subcategory(@category), :label => "Subcategory", prompt: 'select', class: "sub_category" %> 

die folgenden JavaScript-Code hinzufügen.

$(document).ready(function() { 
    $(".main_category").change(function(){ 
    var category = $(".main_category").val(), 
     sub_category = $(".sub_category"), 
     options = [], 
     str = ""; 
    sub_category.find('option').remove(); 

    if(category == 'Risk of harm'){ 
     options = ["Physical Harm", "Psychological distress or discomfort", "Social disadvantage", "Harm to participants", "Financial status", "Privacy"] 
    } 
    else if(category == 'Informed consent'){ 
     options = ["Explanation of research", "Explanation of participant's role in research"] 
    } 
    else if(category == 'Anonymity and Confidentiality'){ 
     options = ["Remove identifiers", "Use proxies", "Disclosure for limited purposes"] 
    } 
    else if(category == 'Deceptive practices'){ 
     options = ["Feasibility"] 
    } 
    else if(category == 'Right to withdraw'){ 
     options = ["Right to withdraw from participation in the project"] 
    } 
    if(options.length > 0){ 
     for(i=0;i<options.length;i++){ 
     str = '<option value="' + options[i] + '">' + options[i] + '</option>' 
     sub_category.append(str); 
     } 
     sub_category.val(options[0]); 
    } 
    }); 
}); 

Ich habe den Code nicht getestet.

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, das herauszufinden. Ich habe es ausprobiert und bekomme immer noch den gleichen Fehler wie ursprünglich. Ich habe versucht, es auch zu jQuery zu ändern. Muss ich vielleicht das "else if" zu "elsif" ändern? – Mel

+0

Gibt es Fehler in der Browserkonsole? – webster

+0

nein - die Konsole zeigt keine Fehler an – Mel