2017-04-13 1 views
0

je le code suivant à mon avis:Matérialiser sélectionnez menu déroulant valeur ne passe pas au contrôleur en Ruby

<div class="input-field col s6"> 
    <form method="POST" action="/results"> 
    <input type="text" id="track" class="validate" name="inicio"> 
    <label class="active" for="track">Nro Inicial de Tracking:</label> 

</div> 
    <div class="input-field col s6"> 
    <select name="sucu"> 
     <option value="" disabled selected></option> 
     <option value="5472">Clorinda</option> 
     <option value="5266">Formosa</option> 
    </select> 
    <label>Seleccionar Sucursal</label> 
    </div> 
    <button style="text-align:center;"class="btn waves-effect waves-light" type="submit" name="action">Submit 
    <i class="material-icons right">send</i> 
    </button> 
</form> 

Et dans mon contrôleur, je suis preneuse le numéro de suivi et sucu valeur comme ceci:

inicio = params[:inicio].to_i 
@sucursal = params[:sucu].to_i 

maintenant, pour une raison quelconque, le contrôleur devient le inicio param, qui est un numéro d'entrée I, mais ne reçoit pas la valeur de la dropdow n, au lieu d'obtenir l'une des deux valeurs 5266 ou 5472, je reçois un 0.

Une idée pourquoi?

+0

Avez-vous une erreur? Avez-vous des scripts qui peuvent affecter l'option sélectionnée avant de soumettre le formulaire? Pourriez-vous partager le code complet de l'action de votre contrôleur? – Gerry

+0

je n'ai pas d'autre entrée de sélection, le contrôleur est juste que, le reste du contrôleur n'affecte pas le comportement, l'erreur n'est pas dans le contrôleur, il doit être dans la vue en quelque sorte, car il passe une valeur nulle (0) – frenciaj

+0

Je peux confirmer que passe null, parce que si je supprime le to_int sur le param, il ne retourne pas une chose ... donc des idées pourquoi le sélecteur donne null? – frenciaj

Répondre

1

Vous avez raison, l'erreur est avec Materialize, qui semble ignorer la valeur select. Ainsi, afin d'obtenir la valeur, vous pouvez ajouter un input caché qui servira d'espace réservé pour la valeur sélectionnée, puis mettre à jour sa valeur lorsque votre boîte select change.

<form method="POST" action="/results"> 
<div class="input-field col s6"> 
    <input type="text" id="track" class="validate" name="inicio"> 
    <label class="active" for="track">Nro Inicial de Tracking:</label> 
    </div> 
    <div class="input-field col s6"> 
    <label>Seleccionar Sucursal</label> 
    <select id="sucu_select"> 
     <option value="" disabled selected></option> 
     <option value="5472">Clorinda</option> 
     <option value="5266">Formosa</option> 
    </select> 
    <input type="hidden" name="sucu" id="sucu" /> 
    </div> 
    <button style="text-align:center;"class="btn waves-effect waves-light" type="submit" name="action">Submit 
    <i class="material-icons right">send</i> 
    </button> 
</form> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('select').material_select(); 
    $('#sucu_select').on('change', function() { 
     $('#sucu').val($('#sucu_select').val()); 
    }); 
}); 
</script> 

J'ai ajouté une id (id="sucu_select") à la boîte select et a créé le caché input qui stockera (et après) la valeur sucu:

<input type="hidden" name="sucu" id="sucu" /> 

Puis j'ai ajouté jQuery pour mettre à jour la valeur cachée :

$('#sucu_select').on('change', function() { 
    $('#sucu').val($('#sucu_select').val()); 
}); 

Peut ne pas résoudre le problème lui-même, mais maintenant vous pouvez obtenir la valeur sélectionnée par params.

+0

cela a fonctionné !! Merci beaucoup!! Maintenant, savez-vous pourquoi matérialiser pourrait se comporter comme ça? Il a quelque chose lié à jquey lui-même? – frenciaj

+0

Bien! Je suis content que ça a marché. Je ne sais pas pourquoi Materialise se comporte comme ça, je n'ai pas regardé dans leur code (et probablement pas dans un futur proche) mais je suis assez sûr que c'est quelque chose avec leur implémentation plutôt que jQuery lui-même. – Gerry